죽은 프로세스를 볼 수 있습니까?

죽은 프로세스를 볼 수 있습니까?

에서는 man psLinux에서 프로세스가 가질 수 있는 다양한 상태를 명확하게 설명합니다.

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]

관련 정보