日期:2014-05-16  浏览次数:20721 次

msgrcv返回EINTR问题
想问是什么信号会导致msgrcv被中断,或者在什么情况下msgrcv会被信号中断,想捕获中断msgrcv的信号,但是又不知道如何下手,以至于无法知道中断msgrcv的根源,各位大虾帮帮忙,3Q

------解决方案--------------------
这个我没法确定是否只在本进程收到信号的时候才会打断系统调用。没法确定。我感觉不是如此。
如果要证实,你可以试验下
用signal函数对所有默认不会终止进程的信号使用。然后循环调用msgrcv等系统调用,直到出现EINTR时,看信号处理函数是否刚刚运行了。
因为write这样的函数也可能出现EINTR,而发信号的话,其实系统默认会重启的。

一般出现EINTR时,直接再次执行此函数就行了。

------解决方案--------------------
msgrcv是阻塞的,楼主是不是用了alarm