glibc documentation on process completion status表示宏WEXITSTATUS返回完成状态的低8字节。
宏:int WEXITSTATUS(int status)
如果状态为WIFEXITED,则此宏返回子进程的退出状态值的低8位。
但是,/usr/include/sys/wait.h
说:
# define WEXITSTATUS(status) __WEXITSTATUS (__WAIT_INT (status))
而且,/usr/include/bits/waitstatus.h
提及:
/* If WIFEXITED(STATUS), the low-order 8 bits of the status. */
#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
除非我的endian-ness概念全部搞砸了,这怎么会是低阶 8位?或者libc是否假设数据以小端方式保存?
答案 0 :(得分:4)
这不是字节序问题。字节序指的是数据如何存储在内存中;在大端或小端机器上,(((status) & 0xff00) >> 8)
提取第15到8位,即status
宏参数的第8到第15个最低有效位。
文档和评论令人困惑,因为状态指的是两个不同的东西。
退出的进程返回状态代码。此退出状态在源中具有类型int
(作为main
的返回值,或作为exit
的参数),但该值应介于0和255之间。
wait
和waitpid
系统调用还会向调用者提供status
。这种状态不同;原始退出状态的低8位现在位于第15位到第8位。我假设文档说WEXITSTATUS返回“低位8位”,因为这是从退出过程的角度打包退出状态