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

C++ 生成的子项退出,状态为127,c++,spawn,waitpid,C++,Spawn,Waitpid,我使用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), &

我使用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");
    }
int-iRet=posix_-spawnp(&iPID,zPath,NULL,NULL,argv,environ);
如果(iRet!=0)
{
返回false;
}
国际贸易;
waitpid(静态演员阵容(iPID)和iState,WNOHANG);

无法检查
waitpid()
中的返回代码,以确保它没有问题


代码的读取方式表明您一次只生成一个子进程(否则就不需要在循环中调用
waitpid()
)。但是,在这种情况下,我不希望使用
WNOHANG

检查
waitpid()
中的返回代码,以确保它没有问题

代码的读取方式表明您一次只生成一个子进程(否则就不需要在循环中调用
waitpid()
)。但是在这种情况下,我不希望使用
WNOHANG

检查

例如:

EINVAL文件\u操作或ATTR指定的值无效

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

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

检查

例如:

EINVAL文件\u操作或ATTR指定的值无效

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


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

waitpid调用返回的值大于0,这意味着有一个有效的子项。waitpid调用返回的值大于0,这意味着有一个有效的子项。我使用fork和execvp重新编写了代码,以更明确地掌握错误,结果是实际的错误信息是:errno=14(错误地址)。一些挖掘发现这是因为我没有以“NULL”作为参数列表的最后一项结束。argv=新字符[iSize+1];argv[iSize]=NULL;修复了这个问题。我使用fork和execvp重新编写了代码,以更明确地理解错误,结果发现实际的错误信息是:errno=14(坏地址)。一些深入研究发现,这是因为我没有以“NULL”作为参数列表的最后一个条目结束。argv=新字符[iSize+1];argv[iSize]=NULL;解决了这个问题。