【发布时间】:2009-04-17 07:27:03
【问题描述】:
我使用 posix_spawnp 执行不同的进程,并检查状态(使用 waitpid)以确保正确创建子进程
int iRet = posix_spawnp(&iPID, zPath, NULL, NULL, argv, environ);
if (iRet != 0)
{
return false;
}
int iState;
waitpid(static_cast<pid_t>(iPID), &iState, WNOHANG);
cout << "Wait: PID " << iPID << " | State " << iState << endl;
if (WIFEXITED(iState)) {
printf("Child exited with RC=%d\n",WEXITSTATUS(iState));
}
else if (WIFSIGNALED(iState)) {
printf("Child exited via signal %d\n",WTERMSIG(iState));
}
else
{
printf("Child is NORMAL");
}
起初这会正确执行,我收到以下消息:
等待:PID 15911 |状态 0 孩子退出 RC=0
同一个进程多次执行后,子进程开始退出,状态为127。
等待:PID 15947 |状态 32512 孩子 以 RC=127 退出
发生这种情况后,我无法让孩子再次产卵。我将上面给出的代码部分包含在一个 for 循环中,但它不会正确生成。 如果我重新启动父进程,它会工作一段时间,但一段时间后会再次出现同样的问题。
我在这里做错了什么?
【问题讨论】: