注意:为了简单起见,我没有包含太多的错误检查,而且我的示例代码实际上没有任何实际用途。
我想要的:
我想要一个fork()
是子进程并让它使用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位的子级退出状态呢?
发布于 2015-10-22 19:26:40
我不认为您想要完成的任务是可能的,因为在Linux (实际上我认为它是特定于UX的)中,进程退出代码是一个8位数(最多256):0-255 (按照惯例,0意味着成功,任何其他东西都意味着错误),而且很多东西都依赖于这个事实(包括您使用的宏)。取以下代码:
// a.c
int main() {
return 257;
}
如果您编译它(gcc a.c
),并运行结果可执行(a.out)检查(echo $?
)它的退出代码(将被操作系统截断;嗯,还是它是外壳?)它将输出1 (环绕算术):257 % 256 =1。
可以使用pipe
(this post是相当描述性的)或套接字(AF_UNIX
类型)。
https://stackoverflow.com/questions/33288356
复制相似问题