【发布时间】:2016-03-19 03:03:25
【问题描述】:
我在让 waitpid 工作时遇到了一些麻烦,有人可以解释一下这段代码有什么问题吗?
#include <iostream>
#include <sys/wait.h>
#include <unistd.h>
using namespace std;
int main() {
string filename_memory;
decltype(fork()) pid;
if (!(pid = fork())) {
cout << "in child" << endl;
sleep(1);
}
else {
int status_child;
do {
waitpid(pid, &status_child, WNOHANG);
cout << "waiting for child to finish" << endl;
} while (!WIFEXITED(status_child));
cout << "child finished" << endl;
}
return 0;
}
【问题讨论】:
-
您可能想检查
waitpid的返回值并仅在返回值等于pid时才读取status_child,类似于if (ret == pid && WIFEXITED(status_child)) break;
标签: c++ linux multiprocessing posix waitpid