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