标记SA_RESTART的作用
在程序执行的过程中,有时候会收到信号,我们可以捕捉信号并执行信号处理函数,信号注册函数里有一个struct sigaction
的结构体,其中有一个sa_flags
的成员,如果sa_flags |= SA_RESTART
,那么:若当前进程阻塞在一个系统调用上,这时来了一个信号,前边注册过的并且sa_flags |= SA_RESTART
,那么当信号处理完之后,这个阻塞的系统调用会继续执行,而不是被打断。通常情况下,如果一个进程被阻塞在一个系统调用,这时来一个信号肯定会打断系统调用,系统调用返回-1并设置errno=EINTR。但不是所有的系统调用都是可以重启动的。