死んだプロセスを見ることは可能ですか?


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の使用と、manページにあるという事実は、実際に表示できることを意味します。どのように、いつでも、私にはわかりません。
テルドン

回答:


6

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
私はそれを見ることができますuntil sleep 0.4 & perl -e '$p = shift; while (1) {open A, "</proc/$p/stat" or last; $_=<A>; print}' $! | grep X; do :; done
ステファンシャゼル14

プロセス(/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 14

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.