joi*_*doi 5 c linux signals signal-handling
在C Linux中,有没有办法像等待信号一样SIGUSR1
并且SIGUSR2
不循环?
例如,在这段代码中,我等待SIGUSR1
或SIGUSR2
打印消息,但是当我想要时,我会在 true 时执行......
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void signal_callback_handler(int signum)
{
printf("Caught signal %d\n",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;
}
Run Code Online (Sandbox Code Playgroud)
我如何才能等待并且不做任何事情(在 true 时不做)直到SIGUSR1
或SIGUSR2
到达?
例如 :
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void signal_callback_handler(int signum)
{
printf("Caught signal %d\n",signum);
}
int main()
{
signal(SIGUSR1, signal_callback_handler);
signal(SIGUSR2, signal_callback_handler);
printf("this line happned after signal arrived \n ");
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
小智 7
有两种可能:
pause()
或者sigwait()
文档pause
:
描述
pause()导致调用进程(或线程)休眠,直到传递信号终止进程或导致调用信号捕获函数。
来源:https: //linux.die.net/man/2/pause
以及以下文档sigwait
:
说明
sigwait ()函数挂起调用线程的执行,直到信号集中指定的信号之一变为挂起状态。该函数接受信号(将其从待处理信号列表中删除),并以 sig 形式返回信号编号。
来源: https: //linux.die.net/man/3/sigwait
两个函数均符合POSIX.1-2001