2012-11-20 170 views
0

我有這樣的代碼:C++檢查兒童狀況

fork(); 
if child: 
    execvp("sth"); //Just returns if errors 
if parent: 
    save child pid; 

在花葯功能我要檢查,如果孩子完成或沒有,我不希望使用waitpid。有沒有其他方法可以做到這一點?

+1

爲什麼你不想使用'waitpid()'? –

+1

http://linux.die.net/man/2/waitpid如果你使用'options = WNOHANG',waitpid'不會阻塞(如果沒有孩子退出,立即返回)。 –

+0

我用'waitpid'和WNOHANG在最後解決我的問題一些如何。 –

回答

1

您可以設置一個信號處理程序來處理SIGCHLD,該信號處理程序將在子結束時傳遞給父項。從技術上講,即使它是異步調用,也是「另一個功能」。即使在獲得信號後,您仍然應該使用waitpid,如果您有多個孩子,這是我知道您將能夠區分他們的唯一方法。

+0

我終於用'waitpid'和'WNOHANG',解決了我的一些問題。 –