基本上我需要的是:
pid = fork();
if (pid == -1)
exit(1);
if (pid == 0)
{
// do stuff in child
}
else
{
// ONLY do stuff while child is running
}
我是否需要在子退出之前创建一个tmp文件,说它不再运行,以便父文件知道该文件存在时子项已退出,或者是否有更简单的方法可以执行此操作?
答案 0 :(得分:4)
您可以使用waitpid
来了解子进程是否仍在运行:
int status;
if (waitpid(pid, &status, WNOHANG) == 0) {
// still running
}
使用WNOHANG
,waitpid
会立即返回,以便程序可以执行其他操作。
如果除了等待子进程终止之外没有其他任何操作,请在没有waitpid
的情况下致电WNOHANG
。
答案 1 :(得分:1)
知道孩子已经终止(并获得退出代码)的标准方法是使用waitpid()
系统调用。
答案 2 :(得分:1)
检查wait ()
和waitpid ()
:http://linux.die.net/man/2/wait
答案 3 :(得分:1)
有很多方法可以做到这一点。如果您不需要对子输出执行任何操作,则可以设置SIGCHLD处理程序以在子项退出时重新获取子项,然后在主执行线程中将其遗忘。您可以使用SIGCHLD处理程序通过IPC机制标记子进程的退出。
或者你可以在else子句中添加一个检查waitpid的while循环。您将在子州的民意调查之间进行离散的工作单元,并且您不会在孩子退出时立即中断。
答案 4 :(得分:0)
如果您只是需要检查孩子是否已停止跑步,请使用系统wait()
来电。
int pid;
int status;
while (true)
{
pid = wait(&status);
if (pid < 0)
//keep waiting
else if (pid == 0)
//child is done
}