标记SA_RESTART的作用

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

参考:http://bbs.chinaunix.net/thread-3772700-1-1.html

posted @ 2022-02-11 14:54  hellozhangjz  阅读(746)  评论(0)    收藏  举报