質問と関連:「kill -9」が動作しない場合はどうなりますか?
私は次のような状況にあります。スレッド化されたゾンビプロセスはinitによって収集されません。:
[root@Arch64]# ps auxH | grep java
gwpl 569 0.0 0.0 0 0 ? Zl 04:23 0:00 [java] <defunct>
gwpl 569 5.5 49.0 1466648 375572 ? Rl 07:25 23:55 [java] <defunct>
gwpl 569 16.0 49.0 1466648 375572 ? Rl 12:27 20:54 [java] <defunct>
gwpl 569 17.9 49.0 1466648 375572 ? Rl 12:47 19:48 [java] <defunct>
root 10466 0.0 0.0 6740 628 pts/0 S+ 14:38 0:00 grep java
[root@Arch64]# pstree -s 569
init---java---3*[{java}]
私ができることはありますか?
または内部にコメントに提案されたバグhttps://unix.stackexchange.com/a/11173/9689?
これがバグであれば、何を捨てて解決する必要がありますか?
上記のリストでは、次のステータスコードを使用します。Zl
、、、。デコード用のチートシートは次のとおりです。Rl
S+
man ps
PROCESS STATE CODES
(...)
R Running or runnable (on run queue)
S Interruptible sleep (waiting for an event to complete)
(...)
Z Defunct ("zombie") process, terminated but not reaped by its parent.
For BSD formats and when the stat keyword is used, additional characters may be displayed:
(...)
L has pages locked into memory (for real-time and custom IO)
(...)
+ is in the foreground process group
答え1
おそらく良いことをするには遅すぎるでしょう。しかし、プロセス569になることができるかどうか疑問に思います。いいえ完全ゾンビですね。おそらく、最初のスレッドは終了していますが、他のスレッドがまだ実行されている場合は、そのOS(どのOSですか?)で得られる可能性があります。その場合は、kill(1)
まだ有効でなければなりません。そうでなければ、次に試すことはtgkill(2)
またはオペレーティングシステムと同等のエントリをR状態にリストされているスレッドで実行します(これらのシステムコールを呼び出すためのプリインストールされたシェルユーティリティがない可能性があるため、いくつかのCを作成する必要があります)。
また、プロセスに接続または接続しようとすると、診断に役立ついくつかの情報が表示されることがありますstrace
。gdb
ゾンビを収穫するときにバグがある可能性はほとんどありませんinit
。バグならバグの可能性が高くなります。コアマルチスレッドプロセスでエラーが正しく処理されません(特定の状況では)。
答え2
初期化は常に待ちます。ことわざのように。したがって、カーネルにバグが発生する可能性は非常に少なくなります。プロセス569のppidとは何ですか?ps -alef
これを提供します。または、BSDの視点がある場合、ps axo stat,pid.ppid,comm
親プロセスが初期化されていない場合、569は普通のゾンビ。ゾンビは数が増えると危険になるため、隅に配置して次回の再起動時に処理するだけです。