3

我对 Linux 中的程序退出状态有疑问。在我的程序中,我派生了一个子进程并调用waitpid它来获取它。返回时waitpid,我想检查我的子进程的退出状态。我转向手册寻求帮助,发现 的第二个参数waitpid将保持退出状态,我可以使用宏WEXITSTATE来读取它。然而,这个宏只是提取了实际退出状态的最低有效 8 位,而在功能手册中exit(int ret_val),它将以 退出ret_val & 0x377,而不是最低有效 8 位。

我的问题是,其他更多的位在哪里?我们只是放弃它们吗?为什么 Linux 采用这种策略?这个实现不会给我们的程序带来麻烦吗?

谢谢和最好的问候。

4

3 回答 3

6

我想你会发现那0x377是真的,或者应该是,0377

它是八进制的,所以   377 8   是 8 位。

于 2011-06-03T18:41:07.110 回答
2

根据 POSIX 规范,退出返回值仅假设在 0 到 255 之间。您不应该返回高于此值的值(换句话说,符合 POSIX 的操作系统将只关心退出返回值的低八位,这就是将传递给父进程的全部内容)。

于 2011-06-03T18:42:50.183 回答
0

Unix/POSIX 仅支持 8 位。10 位将是一个奇数(在数学和逻辑意义上)值,所以我必须同意@DigitalRoss。

于 2011-06-03T18:43:38.413 回答