当前位置: 技术问答>linux和unix
msgrcv返回EINTR问题
来源: 互联网 发布时间:2017-03-20
本文导语: 想问是什么信号会导致msgrcv被中断,或者在什么情况下msgrcv会被信号中断,想捕获中断msgrcv的信号,但是又不知道如何下手,以至于无法知道中断msgrcv的根源,各位大虾帮帮忙,3Q | 这个我没...
想问是什么信号会导致msgrcv被中断,或者在什么情况下msgrcv会被信号中断,想捕获中断msgrcv的信号,但是又不知道如何下手,以至于无法知道中断msgrcv的根源,各位大虾帮帮忙,3Q
|
这个我没法确定是否只在本进程收到信号的时候才会打断系统调用。没法确定。我感觉不是如此。
如果要证实,你可以试验下
用signal函数对所有默认不会终止进程的信号使用。然后循环调用msgrcv等系统调用,直到出现EINTR时,看信号处理函数是否刚刚运行了。
因为write这样的函数也可能出现EINTR,而发信号的话,其实系统默认会重启的。
一般出现EINTR时,直接再次执行此函数就行了。
如果要证实,你可以试验下
用signal函数对所有默认不会终止进程的信号使用。然后循环调用msgrcv等系统调用,直到出现EINTR时,看信号处理函数是否刚刚运行了。
因为write这样的函数也可能出现EINTR,而发信号的话,其实系统默认会重启的。
一般出现EINTR时,直接再次执行此函数就行了。
|
msgrcv是阻塞的,楼主是不是用了alarm