【问题标题】:What is the difference between "termination status" and "end status" as returned from waitpid?从waitpid返回的“终止状态”和“结束状态”有什么区别?
【发布时间】:2020-09-10 19:35:39
【问题描述】:

在 Andrew S. Tanenbaum 和 Albert S. Woodhull 的 Operating Systems Design and Implementation 中,有以下片段:

"[...] 考虑退出,当进程完成执行时应该使用哪些进程。它有一个参数,退出状态(0 到 255),通过 statloc 返回给父进程 [如 waitpid(int , int *statloc, int)] 在waitpid系统调用中,status的低位字节包含终止状态,0为正常终止, 其他值是各种错误条件。 高位字节包含孩子的退出状态(0 到 255)。"

那么,这两个概念有什么区别呢?

【问题讨论】:

    标签: c unix process posix system-calls


    【解决方案1】:

    退出状态是指进程在正常程序终止时传递给exit函数(或从main返回)的值。

    终止状态是指导致程序结束或停止的原因。换句话说,它是正常退出(如上所述),还是被信号终止。这也可以指示进程是否被信号停止(但未终止),或者它是否在停止后继续。这可能在调试进程时发生。

    【讨论】:

      【解决方案2】:

      退出状态是进程本身在调用exit 时提供的(或来自main 的返回值,它被定义为与调用exit 相同)。

      但这不是终止进程的唯一方法。特别是,它可以被一个信号终止,如果程序段错误,或者被零除,或者如果某个其他进程向它发送一个终止信号,就会发生这种情况。在这些情况下,没有退出状态,因为程序永远无法调用exit()。然后,终止状态指示程序是否调用exit(),或者,如果不是,则指示导致终止的信号的编号。可能还有一些特定于实现的标志;例如,如果由信号终止的程序创建了核心转储,Linux 会在终止状态中设置一个标志。

      有关可用于从waitpid 返回的状态值中提取此信息的宏,请参阅main waitpid

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-24
        • 2018-08-11
        • 1970-01-01
        • 2018-02-06
        • 2019-08-03
        • 1970-01-01
        • 1970-01-01
        • 2021-07-31
        相关资源
        最近更新 更多