fork()和waitpid()没有等待孩子

时间:2015-12-13 16:27:25

标签: c++ linux multiprocessing posix waitpid

我在使用waitpid工作时遇到一些麻烦,有人可以解释这段代码有什么问题吗?

Runtime runtime = Runtime.getRuntime();

public Process exec(String[] cmdarray);

1 个答案:

答案 0 :(得分:3)

  

如果wait()或waitpid()返回,则因为子进程的状态   如果可用,这些函数应返回一个等于的值   报告状态的子进程的进程ID。

     

如果在选项中设置WNOHANG调用waitpid(),则至少有   由pid指定的一个子进程,其状态不可用,   并且状态不适用于pid指定的任何进程,0为   回。否则,将返回(pid_t)-1,并将errno设置为   表明错误。

这意味着status_child变量在waitpid返回孩子的pid之前没有意义。

您可以通过应用这些更改来解决此问题:

int ret;
do {
    ret = waitpid(pid, &status_child, WNOHANG);
    cout << "waiting for child to finish" << endl;
} while (ret != pid || !WIFEXITED(status_child));

cout << "child finished" << endl;