2013-04-27 108 views
0

我的计划得到很多的信号,在第二。然而,我希望能够执行一些代码的每一秒。如果我只是这样做:与延迟发送信号给我自己的过程用C在Linux(Ubuntu的)

toSleep = ONESEC; 
while (toSleep > 0) 
    toSleep = sleep(toSleep); 

该程序获取的信号导致此while while循环饿死。

如果可能有某种方式来送我自己的进程的信号每秒,将是完美的,因为该信号会在信号队列中等待,发生在它的转机。

我该怎么做?

回答

3

有一个孩子发出的信号。没有错误检查一个简单的例子(也,你应该使用sigaction的,而不是信号):

#include <stdio.h> 
#include <signal.h> 

void handle(int s) { return; } 
int main(void) { 
    if(fork()) { 
     while(1) { 
      signal(SIGUSR1, handle); 
      pause(); 
      printf("Signal received\n"); 
     } 
    } else { 
     while(1) { 
      sleep(1); 
      kill(getppid(), SIGUSR1); 
     } 
    } 
    return 0; 
} 

此外,而不是发送信号,你可能会考虑让孩子写到管道(或者,如果使用signalfd()可用),然后阻止读取。它有时是显著清洁器完全避免信号。

+0

好主意!谢谢 – Bush 2013-04-27 14:03:43