我试图通过检查waitpid()的结果来确定执行是否失败。但是,即使当我运行一个我知道失败的命令并将问题写入stderr时,下面的检查也不会注册。这段代码可能出了什么问题?
谢谢你的帮助。
pid_t pid; // the child process that the execution runs inside of.
int ret; // exit status of child process.
child = fork();
if (pid == -1)
{
// issue with forking
}
else if (pid == 0)
{
execvp(thingToRun, ThingToRunArray); // thingToRun is the program name, ThingToRunArray is
// programName + input params to it + NULL.
exit(-1);
}
else // We're in the parent process.
{
if (waitpid(pid, &ret, 0) == -1)
{
// Log an error.
}
if (!WIFEXITED(ret)) // If there was an error with the child process.
{
}
}发布于 2012-12-06 09:29:43
如果waitpid出现错误,则waitpid仅返回-1。也就是说,如果您给它一个错误的pid,或者它被中断,等等。如果孩子有一个失败的退出状态,waitpid将成功(返回pid)并设置ret以反映孩子的状态。
要确定子进程的状态,请使用WIFEXITED(ret)和WEXITSTATUS(ret)。例如:
if( waitpid( pid, &ret, 0 ) == -1 ) {
perror( "waitpid" );
} else if( WIFEXITED( ret ) && WEXITSTATUS( ret ) != 0 ) {
; /* The child failed! */
}https://stackoverflow.com/questions/13735501
复制相似问题