我的程序在一秒钟内收到大量信号。然而,我希望能够每秒执行一些代码。如果我这样做:
toSleep = ONESEC;
while (toSleep > 0)
toSleep = sleep(toSleep);
程序获得的信号导致此 while 循环饿死。
如果有某种方法可以每秒向我自己的进程发送一个信号,那将是完美的,因为该信号将在信号队列中等待轮到它发生。
我该怎么做?
最佳答案
让 child 发出信号。一个没有错误检查的简单示例(另外,您应该使用 sigaction 而不是 signal):
#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()
,如果可用)然后阻止读取,而不是发送信号。有时完全避免信号会明显更清洁。
关于c - 在 linux (ubuntu) 上用 C 语言延迟向我自己的进程发送信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16252843/