我使用posix_spawnp执行不同的过程,并检查状态(使用waitpid)以确保正确创建了 child

    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");
    }

首先,这可以正确执行,并且我收到以下消息:



多次执行相同的过程后,子进程开始退出,状态为127。



发生这种情况后,我无法让 child 再次产卵。我在for循环中包含了上面给出的代码部分,但它无法正常产生。
如果我重新启动父进程,它会工作一会儿,但过一会又出现同样的问题。

我在这里做错了什么?

最佳答案

检查this link

例如:



由于种种原因,它似乎可能会退出127。

关于c++ - 产生的子状态为127时退出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/759366/

10-11 22:24