我有一个函数,它会fork出一个新进程,并复制输入和输出缓冲区的文件描述符,并且在一个叫做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
的退出状态,以便在终止之前从父程序发出正确的错误状态代码。
通常怎么做呢?
waitpid()
调用处停顿。 - Alex Reynolds