代码之家  ›  专栏  ›  技术社区  ›  Gayan

生成的子项退出,状态为127

  •  1
  • Gayan  · 技术社区  · 15 年前

        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子项已退出

    在多次执行同一进程之后,子进程开始退出,状态为127。

    等待:PID 15947 |状态32512子项 退出时RC=127

    发生这种情况后,我无法让孩子再次产卵。我将上面给出的代码部分包含在for循环中,但它不能正常生成。 如果我重新启动父进程,它会工作一段时间,但同样的问题会在一段时间后再次出现。

    我做错了什么?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Skurmedel    15 年前

    检查 this link

    例如:

    posix_spawn和posix_spawn子程序的错误代码受以下条件的影响: 如果调用进程从posix_spawn或posix_spawn函数成功返回后发生此错误,则子进程可能会以退出状态127退出。

        2
  •  0
  •   Alnitak    15 年前

    waitpid() 确保它没有问题。

    waitpid() 在循环中)。但是,在这种情况下,我不希望使用 WNOHANG .