我有一个派生一个处理的功能,重复文件描述符的输入和输出缓冲器,然后运行execl
上通过字符串传递的命令调用cmd
:捕获退出状态代码
static pid_t
c2b_popen4(const char* cmd, int pin[2], int pout[2], int perr[2], int flags)
{
pid_t ret = fork();
if (ret < 0) {
fprintf(stderr, "fork() failed!\n");
return ret;
}
else if (ret == 0) {
/*
Assign file descriptors to child pipes (not shown)...
*/
execl("/bin/sh", "/bin/sh", "-c", cmd, NULL);
fprintf(stderr, "execl() failed!\n");
exit(EXIT_FAILURE);
}
else {
/*
Close parent read and write pipes (not shown)...
*/
return ret;
}
return ret;
}
只要我的测试输入正确,每个cmd
实例都可以正确处理我的数据。
当坏数据传递给一个子进程,我的父母程序将运行到完成并退出与0
非错误状态代码如果我故意把在恶劣的输入 - 有目的地试图让在cmd
实例中的一个以预期的方式失败 - 我想知道如何捕捉cmd
的退出状态,这样我可以终止前发出从父程序正确的错误状态代码。
这是怎么一般都做?
当我运行你的第一个代码块(例如“例子”)时,进程挂在'waitpid()'调用上。 – 2014-12-05 07:01:50
@AlexReynolds:这是默认情况下的工作方式,请参阅更新以回答。您需要某种策略来检测并处理子进程提前终止的可能性。 – 2014-12-05 07:35:26