【问题标题】:Program exit state程序退出状态
【发布时间】:2011-06-03 18:38:26
【问题描述】:

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

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

感谢和最好的问候。

【问题讨论】:

    标签: c linux exit exit-code


    【解决方案1】:

    我想你会发现0x377 确实是或者应该是0377

    它是八进制,所以 3778 是 8 位。

    【讨论】:

    • 我把 0377 误认为是十六进制。 :-) 谢谢。
    【解决方案2】:

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

    【讨论】:

    • 当然,状态的其他位包含进程是否转储核心以及什么信号将其关闭(如果它没有正常退出)。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-09
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      相关资源
      最近更新 更多