可能看到死进程吗?

可能看到死进程吗?

在 中man ps,它清楚地说明了进程在 Linux 上可以具有的不同状态。

D    Uninterruptible sleep (usually IO)
R    Running or runnable (on run queue)
S    Interruptible sleep (waiting for an event to complete)
T    Stopped, either by a job control signal or because it is being traced.
W    paging (not valid since the 2.6.xx kernel)
X    dead (should never be seen)
Z    Defunct ("zombie") process, terminated but not reaped by its parent.

即使它X是一个进程状态,也不应该被看到。但这是正确的吗?是否有一种理论方法可以将其视为过程的状态?还是完全100%不可能?

答案1

我对 Linux 内核进行了一些深入研究,但不了解它的内核如何工作,也不了解任何重要的 C 知识。所以请善待这个理论:)

状态DEAD已定义https://github.com/torvalds/linux/blob/master/fs/proc/array.c#L141并用于https://github.com/torvalds/linux/blob/master/fs/exec.c#L974仅给出返回状态。因此,可以看到它的唯一方法是在周围检查进程状态https://github.com/torvalds/linux/blob/master/fs/exec.c#L986(或稍后在任何地方调用此函数......)。

如果您尝试杀死一个死进程,它将被处理并忽略https://github.com/torvalds/linux/blob/master/kernel/signal.c#L1363

所以理论上......我认为答案是肯定的。 X 作为一种状态在理论上可以看到,但在现实生活中可能从未出现过。

如果我错了,请纠正我。我对此完全不确定。

答案2

以下是我们刚刚在实时系统上遇到的一个证据:

$ sudo ps axf -O wchan
31103 -      R ?        00:00:00 /bin/bash /usr/local/bin/monitorcron taskA
31104 exit   X ?        00:00:00  \_ [su]

相关内容