pause()
或C等待信号循环
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C等待信号循环相关的知识,希望对你有一定的参考价值。
在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 %d ",signum); } int main() { signal(SIGUSR1, signal_callback_handler); signal(SIGUSR2, signal_callback_handler); while(1) { printf("Program processing stuff here. "); 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 %d ",signum); } int main() { signal(SIGUSR1, signal_callback_handler); signal(SIGUSR2, signal_callback_handler); printf("this line happned after signal arrived "); return EXIT_SUCCESS; }
在C Linux中,有没有办法等待SIGUSR1和SIGUSR2等信号而没有循环?对于此代码中的eaxmple,我等待SIGUSR1或SIGUSR2打印消息,但是当我想要时,我会在true的同时做。
有两种可能性:
sigwait()
pause
的文档:Description
pause()使调用进程(或线程)进入休眠状态,直到传递了终止该进程或导致该进程的信号。调用信号捕获功能。来源:https://linux.die.net/man/2/pause以及
函数会暂停调用线程的执行,直到信号集中指定的信号之一变为未决状态。该函数接受信号(将其从挂起的信号列表中删除),并以信号形式返回信号编号。sigwait
的文档:Description
sigwait()来源:https://linux.die.net/man/3/sigwait两个功能均符合POSIX.1-2001
答案
pause()
或以上是关于C等待信号循环的主要内容,如果未能解决你的问题,请参考以下文章