2013-02-28 94 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

我同意格式化使检查这个困难,但它看起来像你正在呼叫信号()暂停()。您需要将信号呼叫移至主要顶部,或至少在暂停之前。