WEXITSTATUS命令

时间:2018-04-06 14:08:59

标签: linux operating-system

我正在试图找出以下代码的作用:

int main()
    {
    int value = 3;
    if (fork() != 0)
    {
        wait(&value);
    }
    else
    {
        exit(value);
    }
    value = WEXITSTATUS(value);
    value++;
    printf("%d", value);
    return value;
}

我知道它创造了一个儿子进程,它还告诉父进程等待儿子进程。并命令儿子进程退出(3)。 当我调试我的答案时,我看到命令:第6行的wait(& value)返回3 * 256,但我读到它假设从子进程返回退出状态值的低8位,意思是它不能超过255.它不会改变我的输出4,即退出状态加1,但我仍然感兴趣的地方,为什么我得到256。 有人可以解释我错过了什么,或者完全没有理解? 非常感谢!

1 个答案:

答案 0 :(得分:0)

您混淆的原因是您正在处理设计不佳的操作系统服务。

您需要查看wait()函数的文档:

http://pubs.opengroup.org/onlinepubs/009695399/functions/wait.html

发生的事情是,这个按事故设计的功能将很多东西变成了一个返回参数。有许多宏会通过扩展位字段将此返回值解压缩到其单独的组件中。

你得到3 * 256而不是3的原因是该函数必须为进程退出状态腾出空间,这显然是0.你得到二进制值:

0000 0000 0000 0000 0000 0011 0000 0000
|UNUSED           |
                    |Process 
                     Return 
                     Value  | | Other Stuff |