2012-11-20 126 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',解决了我的一些问题。 –