【发布时间】:2016-01-22 03:57:03
【问题描述】:
注意:为简单起见,我没有包含太多错误检查,而且我的示例代码并没有真正起到任何实际用途。
我想要什么:
我想要一个fork()s 子进程并让它使用execl() 调用进程的程序。然后我的父母检索该进程的退出代码。这是相当微不足道的。
我尝试了什么:
int main(int argc, char** argv) {
int ch = fork();
if(ch == -1) {
perror(NULL);
}else if(ch == 0) {
// In child, invoke process
execl("/path/process", "process", 0);
}else {
// In parent, retrieve child exit code
int status = 0;
wait(&status);
// print exit status
if(WIFEXITED(status)) printf("%d\n", WEXITSTATUS(status));
}
}
我的问题:
WEXITSTATUS() 仅检索退出值的低 8 位,而我需要来自 int 值的所有位。具体来说,process进行计算,结果可能大于8位。它甚至可能是负数,在这种情况下,将需要最高位来表示正确的值。
我还尝试了什么:
另外,在环顾四周时,我发现了pipe() 函数。但是,我不确定在这种情况下如何使用它,因为在调用 execl() 之后,我无法从子进程中写入文件描述符。
那么我该如何检索大于 8 位的孩子的退出状态?
【问题讨论】: