ゾンビプロセスは削除または終了できません。

ゾンビプロセスは削除または終了できません。

削除を拒否するゾンビプロセスがありますが、killall -9 1913とpkillを試しましたが、うまくいきませんでした。どんな助けでも大変感謝します。 Ubuntu 12.04.2 LTSを実行します。ありがとうございます。

aruna@aruna-desktop:~$ ps -aux | grep Z
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
aruna     1913  0.0  0.0      0     0 ?        Z    12:07   0:00 [lightdm-session] <defunct>

答え1

このゾンビプロセスの根本原因は説明されたエラーのようです。ここ

ゾンビプロセスを削除します。

SIGKILL信号を使用して通常のプロセスを終了できるため、ゾンビプロセスを終了できません。ゾンビプロセスはすでに終了しています。システムに多くのゾンビプロセスがない限り、ゾンビプロセスを削除する必要はないことに注意してください。いくつかのゾンビプロセスは無害です。しかし、ゾンビプロセスを削除する方法はいくつかあります。

1つの方法は、SIGCHLD信号を親プロセスに送信することです。このシグナルは親プロセスにwait()システムコールを実行し、ゾンビの子プロセスをクリーンアップするように指示します。 kill コマンドを使用してシグナルを送信し、次のコマンドの pid を親プロセスの PID に置き換えます。

kill -s SIGCHLD pid

ただし、親プロセスが正しくプログラムされておらず、SIGCHLD信号を無視しても、役に立ちません。ゾンビの親プロセスを終了または閉じる必要があります。ゾンビプロセスの作成が完了すると、initはゾンビプロセスを継承し、新しい親プロセスになります。 (initはLinuxで起動時に開始される最初のプロセスであり、PID 1が割り当てられます。)initは定期的にwait()システムコールを実行してゾンビサブプロセスをクリーンアップするので、initはゾンビプロセスをすばやく処理できます。親プロセスを閉じた後に再起動できます。

親プロセスがゾンビプロセスを生成し続ける場合は、wait()を正しく呼び出してゾンビサブプロセスを取得するように変更する必要があります。システムのプログラムがまだボットを作成している場合は、バグレポートを送信してください。

lオプションを使用すると、ps親プロセスIDを見つけることができます。ps -lこれは表示され、子プロセスPIDは表示されます。PPID

pstreeコマンドを使用してプロセスツリーを表示することもできます。

答え2

まあ、私がグーグルする前に、「あなたはそうすることはできません」と言ったでしょう。この電卓の問題。以下を使用してシステムコールをgdb呼び出すことができるようです。waitpid()親プロセスゾンビプロセス。良い技術。

私のアドバイスはそうしないでください。 「lightdm」が何であれ、子プロセスを終了した後に頻繁にクリーンアップすることも、そうであると仮定することもできます。waitpid()これにより水gdbを受け取ることができますlightdm

関連情報