2013-02-28 93 views
0

我希望我的程序等待SIGUSR1的信號,但目前不起作用。等待信號

,將捕獲的信號類:

#include<signal.h> 
#include<unistd.h> 

int main(int argc, char *argv[]){ 

     int pid; 
     pid=getpid(); 
     printf("PID: %d\n", pid); 

     pause(); 
     void my_handler(int signum) 
     { 
       if (signum == SIGUSR1) 
       { 
        printf("Received SIGUSR1!\n"); 
      } 
    } 

    signal(SIGUSR1, my_handler); 

}

計劃,這將使信號:

#include<stdlib.h> 
#include<signal.h> 
#include<unistd.h> 
#include<time.h> 

int main(int argc, char *argv[]){ 

    int i; 

    printf("Filename: %s, Receiver PID: %s\n", argv[1], argv[2]); 

    FILE *fp; 
    fp=fopen(argv[1], "w"); 

    kill(atol(argv[1]),SIGUSR1); 
    } 

} 

你會先運行接收器像./receiver 1 那麼之後你找到您要運行的接收器的PID(例如3375)./signaler 1 3375

暫停是我用來等待的功能,但它不工作,sigwaitinfo或sigsuspend工作?

+2

這是一個糟糕的剪切/粘貼或者你有你的信號處理程序嵌套在main()?在其他問題中,'argv [2]'是PID傳遞給'kill',而不是'argv [1]'。 – 2013-02-28 20:01:27

回答

1

我同意格式化使檢查這個困難,但它看起來像你正在呼叫信號()暫停()。您需要將信號呼叫移至主要頂部,或至少在暫停之前。