系统调用可分为两类:慢速系统调用和其他系统调用。
结合pause,回顾慢速系统调用:
慢速系统调用被中断的相关行为,实际上就是pause的行为: 如,read
① 想中断pause,信号不能被屏蔽。
② 信号的处理方式必须是捕捉 (默认、忽略都不可以)
③ 中断后返回-1, 设置errno为EINTR(表“被信号中断”)
可修改sa_flags参数来设置被信号中断后系统调用是否重启。SA_INTERRURT不重启。 SA_RESTART重启。
扩展了解:
sa_flags还有很多可选参数,适用于不同情况。如:捕捉到信号后,在执行捕捉函数期间,不希望自动阻塞该信号,可将sa_flags设置为SA_NODEFER,除非sa_mask中包含该信号。
原文:https://www.cnblogs.com/lr1402585172/p/10563884.html