我在使用waitpid工作时遇到一些麻烦,有人可以解释这段代码有什么问题吗?
Runtime runtime = Runtime.getRuntime();
public Process exec(String[] cmdarray);
答案 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;