【发布时间】:2015-02-03 02:01:44
【问题描述】:
我有一个函数,它分叉一个进程,复制输入和输出缓冲区的文件描述符,然后在通过名为 cmd 的字符串传入的命令上运行 execl:
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 的退出状态,以便我可以在终止之前从父程序发出正确的错误状态代码。
这一般是怎么做的?
【问题讨论】: