我試圖使我的進程waitpid()
爲子進程,但也打印每隔一段時間的東西。防止SIGALRM中斷waitpid()
我目前的計劃是安排一個itimer
,waitpid()
,處理SIGALRM
印刷,並停止該計時器waitpid()
完成時。
我無法弄清楚的唯一部分是阻止SIGALRM
中斷waitpid()
。
我查看了man頁面,沒有看到任何標誌。
想法?
我試圖使我的進程waitpid()
爲子進程,但也打印每隔一段時間的東西。防止SIGALRM中斷waitpid()
我目前的計劃是安排一個itimer
,waitpid()
,處理SIGALRM
印刷,並停止該計時器waitpid()
完成時。
我無法弄清楚的唯一部分是阻止SIGALRM
中斷waitpid()
。
我查看了man頁面,沒有看到任何標誌。
想法?
如果waitpid()
回到-1
和errno
等於EINTR
剛剛重新撥打waitpid()
。
pid_t pid;
while (((pid_t) -1) == (pid = waitpid(...)))
{
if (EINTR == errno)
{
continue;
}
...
}
可選地(至少對於Linux)的waitpid()
上的信號的接收的返回可以經由SA_RESTART
標誌上安裝信號處理程序設置來避免。有關詳情,請參閱此處:http://man7.org/linux/man-pages/man7/signal.7.html
或者你在調用waitpid函數()之前,屏蔽信號,但隨後你的報警器將被延遲,直到暢通,或者你必須檢查waitpid函數()的返回值,並將errno爲EINTR