【发布时间】:2014-02-28 17:11:06
【问题描述】:
这纯粹是学术问题,我真的不需要知道这些信息,但我想更多地了解内核:-)
根据内核文档http://www.tldp.org/LDP/tlk/kernel/processes.html linux内核中的进程有以下状态:
跑步
进程要么正在运行(它是当前进程在 系统)或它已准备好运行(它正在等待分配给其中之一 系统的 CPU)。
等待
进程正在等待事件或资源。 Linux 区分两种等待过程;可中断和 不间断。可中断的等待进程可以被中断 信号,而不间断的等待进程正在直接等待 在硬件条件下,不能在任何中断 情况。
已停止
进程已停止,通常是通过接收信号。一个过程 正在调试的可以处于停止状态。
僵尸
这是一个暂停的进程,由于某种原因,它仍然有一个 任务向量中的 task_struct 数据结构。听起来就是这样 就像一个死进程。
如您所见,当我使用ps 之类的命令拍摄进程状态快照时,我可以看到,如果它处于Running 状态,那么该进程要么是字面上正在运行,要么只是等待分配给某个CPU 按内核。
在我看来,这 2 个状态(实际上都由 task_struct 中的 1 个状态表示)是完全不同的。
为什么没有像“Ready”这样的状态表示进程“准备好运行”但到目前为止还没有分配给任何 CPU,这样task_struct 就可以更清楚地了解真实状态?是否有可能检索到这些信息,或者无论出于何种原因,哪个进程在 CPU 上“真正运行”是秘密的?
【问题讨论】:
-
我不认为这是秘密信息,因为调度程序需要知道要切换什么。找到答案的最佳方法可能是注册内核邮件列表或自己查看the source。
标签: linux-kernel