![죽은 프로세스를 볼 수 있습니까?](https://linux55.com/image/53448/%EC%A3%BD%EC%9D%80%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%A5%BC%20%EB%B3%BC%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
에서는 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]