2013-08-30 65 views
1

我想等待分叉的子進程完成執行,但我不想無限期地等待,但是在給定時間內最多爲,如果仍在運行,則會終止子進程如何等待孩子進程完成時限?

在Linux上wait(2)說:

否則他們阻止,直到孩子改變狀態或信號處理程序中斷調用(假設系統調用不會自動使用的sigaction的SA_RESTART標誌重新啓動(2)) 。

有人能告訴我一個例子,我應該如何設置一個信號中斷一定時間後等待,然後繼續執行

+0

一種選擇是產生第二個計時器子進程,它將結束並因此在計時器之後改變狀態。然後原始孩子或計時器孩子可以結束父母的等待狀態。 – abiessu

+0

你過得如何準確?整秒確定,還是需要分秒? –

+0

等待時間通常應該是0.1 - 1秒。 –

回答

2

您可以使用alarm(3)設置一個計時器,該計時器在到期時將SIGALRM發送給您的進程。 kill(2)是它的安全,從信號處理(見signal(7) man page)調用的功能之一,所以你可以直接從SIGALRM處理器殺子進程和阻塞wait(2)wait(3)你正在做的主線程將返回上。

如果您需要更高的分辨率,您可以使用ualarm(3)來代替。