pause()函数会阻塞,直到信号到达.
假设进程得到一个信号并返回pause(),那么信号处理程序是否会在pause()调用之后的代码之前执行,或者结果是意外的?
假设进程得到一个信号并返回pause(),那么信号处理程序是否会在pause()调用之后的代码之前执行,或者结果是意外的?
例:
void sigusr1_handler() { // .. handler code } void main() { // .. bind handler to SIGUSR1 pause(); // wait for SIGUSR1 // some more code }
在sigusr1_handler()完成后,或者存在竞争条件时,是否会执行“更多代码”?如果是这样,解决方案是什么?
除了忙碌的等待之外我什么也想不到,但是根本不需要停顿……
解决方法
引自
the man page for pause(2):
pause() returns only when a signal was caught and the signal-catching function returned. In this case,pause() returns -1,and errno is set to EINTR.
您可以确定您的信号处理程序在更多代码之前运行.