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

我想从子进程返回一个整数值.

但是,如果我使用exit(1)我得到256作为输出.退出(-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,0);
if (WIFEXITED(status)) {
    printf("%d",WEXITSTATUS(status));
}

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...