在 linux (ubuntu) 上的 C 中延迟向我自己的进程发送信号
Posted
技术标签:
【中文标题】在 linux (ubuntu) 上的 C 中延迟向我自己的进程发送信号【英文标题】:Send signal with a delay to my own process in C on linux (ubuntu) 【发布时间】:2013-04-27 13:44:50 【问题描述】:我的程序在一秒钟内收到很多信号。然而,我希望能够每秒执行一些代码。如果我这样做:
toSleep = ONESEC;
while (toSleep > 0)
toSleep = sleep(toSleep);
程序得到的信号导致这个while循环饿死。
如果有某种方法可以每秒向我自己的进程发送一个信号,那将是完美的,因为该信号将在信号队列中等待轮到它发生。
我该怎么做?
【问题讨论】:
【参考方案1】:让孩子发出信号。一个没有错误检查的简单示例(另外,您应该使用 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()
,如果可用),然后阻止读取,而不是发送信号。有时完全避开信号会更干净。
【讨论】:
以上是关于在 linux (ubuntu) 上的 C 中延迟向我自己的进程发送信号的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 C++/QT 应用程序在 Linux x86_64 上的 nanosleep() 中崩溃?