C++ 生成的子项退出,状态为127
我使用posix_spawnp执行不同的进程,并检查状态(使用waitpid)以确保正确创建子进程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), &
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;解决了这个问题。