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


13

에서 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.

tho X도 프로세스 상태이므로 절대로 보여서는 안됩니다. 그러나 맞습니까? 프로세스의 상태로 볼 수있는 이론적 인 방법이 있습니까? 아니면 100 % 불가능한가요?


2
의 사용 SHOULD 하고 매뉴얼 페이지에 있다는 사실은 그것을보고 실제로 가능하다는 것을 의미한다. 나는 언제 어떻게 언제인지 전혀 모른다.
terdon

답변:


7

나는 내부 코어에서 작동하는 방식이나 큰 C 지식에 대한 지식없이 Linux 커널에 대해 조금 뛰어 들었습니다. 따라서이 이론을 잘 활용하십시오 :)

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
나는 그것을 볼 수있다until sleep 0.4 & perl -e '$p = shift; while (1) {open A, "</proc/$p/stat" or last; $_=<A>; print}' $! | grep X; do :; done
Stéphane Chazelas

프로세스 (/proc/.../stat의 출력)는 다음과 같습니다. 4603 (sleep) X 0 -1 -1 0 -1 4202508 0 0 0 0 0 0 0 0 20 0 0 0 175042279 0 0 0 0 0 0 0 0 0 0 0 0 18446744071579306375 0 0 17 0 0 0 0 0 0.. 질문에 답변했습니다. X가 가능합니다! 감사!
xeor

1

라이브 시스템에서 방금 실행 한 증거는 다음과 같습니다.

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

다음에 실행할 때까지 프로세스가 지 났는지 기억하십니까 ps?
Hitechcomputergeek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.