2

在Andrew S. Tanenbaum 和 Albert S. Woodhull 的操作系统设计和实现中,有以下片段:

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

那么,概念之间有什么区别呢?

4

2 回答 2

2

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

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

于 2020-05-24T03:08:57.217 回答
1

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

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

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

于 2020-05-24T03:08:04.100 回答