C 等待带循环的信号



在C Linux中,有没有办法在没有循环的情况下等待像SIGUSR1SIGUSR2这样的信号?

对于此代码中的 eaxmple,我等待SIGUSR1SIGUSR2打印消息,但是当我想要时,我这样做而真实....

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void signal_callback_handler(int signum)
{
printf("Caught signal %dn",signum); 
}
int main()
{
signal(SIGUSR1, signal_callback_handler);
signal(SIGUSR2, signal_callback_handler);
while(1)
{
printf("Program processing stuff here.n");
sleep(1);
}
return EXIT_SUCCESS;
}

我怎么能等到SIGUSR1SIGUSR2到来而不做任何事情(在真的时候不要做(?

例如:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void signal_callback_handler(int signum)
{
printf("Caught signal %dn",signum); 
}
int main()
{
signal(SIGUSR1, signal_callback_handler);
signal(SIGUSR2, signal_callback_handler);
printf("this line happned after signal arrived n ");
return EXIT_SUCCESS;
}

有两种可能性:

  • pause()
  • sigwait()

pause文档:

描述
pause(( 会导致调用进程(或线程(休眠,直到传递终止进程或导致 调用信号捕获函数。

来源:https://linux.die.net/man/2/pause


以及sigwait的文档:

说明
sigwait((函数暂停调用线程的执行,直到信号集集中指定的信号之一变为挂起。该函数接受信号(将其从挂起的信号列表中删除(,并以 sig 为单位返回信号编号。

来源:https://linux.die.net/man/3/sigwait

两个功能都符合POSIX.1-2001

相关内容

  • 没有找到相关文章

最新更新