我正在尝试从子进程返回一个整数值。
但是,如果我使用退出(1),我会输出 256 。 退出(-1)提供 65280 。
有没有办法可以获得我从子进程发送的实际int值?
if(!(pid=fork()))
{
exit(1);
}
waitpid(pid,&status,0);
printf("%d",status);
编辑:使用exit(-1)(这是我真正想要的)我得到255作为WEXITSTATUS(状态)的输出。它应该是未签名的吗?
答案 0 :(得分:17)
你试过“man waitpid”吗?
waitpid()调用返回的值是退出值的编码。有一组宏将提供原始退出值。或者,如果您不关心可移植性,可以尝试将值右移8位。
您的代码的可移植版本将是:
if(!(pid=fork()))
{
exit(1);
}
waitpid(pid,&status,0);
if (WIFEXITED(status)) {
printf("%d", WEXITSTATUS(status));
}
答案 1 :(得分:11)
退出代码是16位值。
高位8位是exit()
的退出代码。
如果进程正常退出,则低8位为零,或编码杀死进程的信号编号,以及是否转储核心(如果发出信号,则高位为零)。
查看<sys/wait.h>
标题和waitpid()
系统调用的文档,了解如何使用WIFEXITED和WEXITSTATUS获取正确的值。
答案 2 :(得分:4)
请参阅documentation。首先使用WIFEXITED
来确定它是否正常终止(可能具有非零状态)。然后,使用WEXITSTATUS
确定实际状态的低8位是什么。
答案 3 :(得分:2)
使用WEXITSTATUS()
读取孩子的正确退出状态
传递waitpid()
或wait()
例如:
int cstatus;
wait(&cstatus);
printf("Child exit status : %d\n", WEXITSTATUS(cstatus));
答案 4 :(得分:0)
没有。它将其设置为255.只有8位可用。请参阅文档。