【发布时间】:2012-11-24 00:04:23
【问题描述】:
我试图通过检查 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.
{
}
}
【问题讨论】:
-
WIFEXITED用于区分WIFSIGNALED和WIFSTOPPED。在正常情况下,当孩子失败(以非零状态退出)时,WIFEXITED为真。您需要同时检查WIFEXITED和WEXITSTATUS。
标签: c exec fork execvp waitpid