为什么wait()将状态设置为256而不是分叉进程的-1退出状态?

11 c posix exit waitpid

我正在尝试从子进程返回一个整数值.

但是,如果我使用exit(1)我得到256作为输出.exit(-1)给出65280.

有没有办法可以获得我从子进程发送的实际int值?

if(!(pid=fork()))
{
    exit(1);
}
waitpid(pid,&status,0);
printf("%d",status);
Run Code Online (Sandbox Code Playgroud)

编辑:使用exit(-1)(这是我真正想要的)我得到255作为WEXITSTATUS(状态)的输出.它应该是未签名的吗?

Dar*_*ron 18

你试过"man waitpid"吗?

waitpid()调用返回的值是退出值的编码.有一组宏将提供原始退出值.或者,如果您不关心可移植性,可以尝试将值右移8位.

您的代码的可移植版本将是:

if(!(pid=fork()))
{
    exit(1);
}
waitpid(pid,&status,0);
if (WIFEXITED(status)) {
    printf("%d", WEXITSTATUS(status));
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*ler 11

退出代码是16位值.

高阶8位是退出代码exit().

如果进程正常退出,则低8位为零,或编码杀死进程的信号编号,以及是否转储核心(如果发出信号,则高位为零).

查看系统调用的<sys/wait.h>标题和文档,waitpid()了解如何使用WIFEXITED和WEXITSTATUS获取正确的值.

  • 在 POSIX-ish 系统上,没有。在 Windows 上,是的。 (2认同)