在C Linux中,有没有办法在没有循环的情况下等待像SIGUSR1
和SIGUSR2
这样的信号?
对于此代码中的 eaxmple,我等待SIGUSR1
或SIGUSR2
打印消息,但是当我想要时,我这样做而真实....
#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;
}
我怎么能等到SIGUSR1
或SIGUSR2
到来而不做任何事情(在真的时候不要做(?
例如:
#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