我对Linux中的程序退出状态有疑问。在我的程序中,我分叉子进程并调用waitpid
来获取它。当waitpid
返回时,我想检查我的子进程的退出状态。我转向手册寻求帮助,发现waitpid
的第二个参数将保持退出状态,我可以使用宏WEXITSTATE
来读取它。但是,此宏只提取实际退出状态的最低8位,而在函数exit(int ret_val)
的手动中,它将以ret_val & 0x377
退出,而不是最低有效8位。
我的问题是,其他更多位在哪里?我们只是放弃它们吗?为什么Linux采用这种策略?这个实现不会给我们的程序带来麻烦吗?
谢谢和最诚挚的问候。
答案 0 :(得分:5)
我认为您会发现0x377
确实或应该是0377
。
它是八进制的,所以 377 8 是8位。
答案 1 :(得分:2)
退出返回值仅假定为POSIX规范的0到255之间。您不应该返回高于该值的值(换句话说,POSIX兼容的操作系统只会关注退出返回值的低八位,并且所有这些都将传递给父进程)。
答案 2 :(得分:0)
Unix / POSIX仅支持8位。 10位是奇数(在数学和逻辑意义上)值,所以我必须同意@DigitalRoss。