程序退出状态

3
我有关于Linux程序退出状态的问题。在我的程序中,我fork了一个子进程并调用waitpid来回收它。当waitpid返回时,我想检查子进程的退出状态。我阅读了手册,发现waitpid的第二个参数将保存退出状态,我可以使用宏WEXITSTATUS来读取它。然而,这个宏只提取真实退出状态的最低有效8位,而在exit(int ret_val)函数的手册中,它将以ret_val&0x377退出,而不是最低有效8位。
我的问题是,其他更多的位在哪里?我们是否简单地舍弃了它们?为什么Linux采用这种策略?这种实现是否会给我们的程序带来麻烦?
谢谢和最好的问候。
3个回答

6
我认为你会发现0x377实际上应该是0377
这是八进制数,因此3778是8位。

我把0377误认为是十六进制。 :-) 谢谢。 - Summer_More_More_Tea

2

根据POSIX规范,退出返回值只应在0到255之间。您不应该返回比这更高的值(换句话说,符合POSIX标准的操作系统只关心您的退出返回值的低八位,而这就是传递给父进程的所有内容)。


当然,状态的其他位保存了诸如进程是否转储核心以及它是由哪个信号导致崩溃的(如果它没有正常退出)等信息。 - Nemo

0

Unix/POSIX只支持8位。10位将是一个奇怪的(在数学和逻辑意义上都是)值,所以我同意@DigitalRoss的观点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接