クロムブラウザは応答しませんでしたので、私はそれを殺そうとしましたが、プロセスが消える代わりに<defunct>その右側にあり、殺されませんでした:

<defunct>プロセスには何があり、なぜそれが殺されないのですか?
クロムブラウザは応答しませんでしたので、私はそれを殺そうとしましたが、プロセスが消える代わりに<defunct>その右側にあり、殺されませんでした:

<defunct>プロセスには何があり、なぜそれが殺されないのですか?
回答:
出力から「無効」が表示されます。これは、プロセスがタスクを完了したか、破損または強制終了したが、子プロセスがまだ実行されているか、これらの親プロセスが子プロセスを監視していることを意味します。この種のプロセスを強制終了するには、kill -9 PIDは機能しません。このコマンドでそれらを殺そうとすることができますが、何度も何度も表示されます。
この無効なプロセスの親プロセスを特定し、強制終了します。これを知るには、次のコマンドを実行します。
ps -ef | grep defunctUID          PID     PPID       C    STIME      TTY          TIME              CMD
1000       637      27872      0   Oct12      ?        00:00:04 [chrome] <defunct>
1000      1808      1777       0    Oct04     ?        00:00:00 [zeitgeist-datah] <defunct>
次にkill -9 637 27872、無効なプロセスがでなくなったことを確認しps -ef | grep defunctます。
1(init)の場合はどうなりますか?私はただ待たなければならないでしょうか?
                    ps -ef | grep defunct | grep -v grep | cut -b8-20 | xargs kill -9
                    grep [d]efunct同様の値に変更するだけで、一致しなくなります。
                    parents_of_dead_kids=$(ps -ef | grep [d]efunct  | awk '{print $3}' | sort | uniq | egrep -v '^1$'); echo "$parents_of_dead_kids" | xargs kill。kill -9必要に応じて、30秒程度後にスクリプトを再実行します。(私は特に殺害を禁止していることに注意してくださいInit)
                    マークされたプロセスは、親がそれらを適切に破棄していないために残って
<defunct>いるデッドプロセス(いわゆる「ゾンビ」)です。これらのプロセスはinit(8)、親プロセスが終了すると破棄されます。
すでに死んでいるので、それを殺すことはできません。残っているのは、プロセステーブルのエントリのみです。
UnixおよびUnixライクなコンピューターオペレーティングシステムでは、ゾンビプロセスまたは機能しないプロセスは、実行は完了したがプロセステーブルにエントリが残っているプロセスです。このプロセスは、親プロセスが子プロセスの終了ステータスを読み取るために必要です。
それらの多くがない限り、そのようなプロセスを許可しても害はありません。ゾンビは最終的にその親によって(を呼び出すことでwait(2))刈り取られます。元の親が自身の終了前にそれを刈り取っていない場合、initプロセス(pid == 1)は後でそれを行います。ゾンビプロセスは次のとおりです。
終了し、終了ステータスがそのプロセスの終了を待機している別のプロセスに報告されたときに削除されるプロセス。
Mike Sに感謝します。私たちはあなたの行を取り、親がin.telnetdである無効なプロセスを殺すスクリプトを書きました。親プロセスを殺したくはありません。問題を引き起こしていることがわかっているtelnetdだけで、必要に応じて複数回実行して、複数のプロセスを殺します。
# egrep -v '^1$ = Make sure the process is not the init process.
# awk '{print $3}' = Print the parent process.
first_parent_of_first_dead_kid=$(ps -ef | grep [d]efunct | awk '{print $3}' | head -n1 | egrep -v '^1$')
echo "$first_parent_of_first_dead_kid"
# If the first parent of the first dead kid is in.telnetd, then kill it.
if ps -ef | grep $first_parent_of_first_dead_kid | grep in.telnetd;then
        echo "We have a defunct process whose parent process is in.telnetd" | logger -t KILL-DEFUNCT-TELNET
        echo "killing $first_parent_of_first_dead_kid" | logger -t KILL-DEFUNCT-TELNET
        kill $first_parent_of_first_dead_kid 2>&1 | logger -t KILL-DEFUNCT-TELNET
fi
              パディントンの答えを拡大
出力からdefunctが表示されます。これは、この子プロセスがタスクを完了したか、破損または強制終了したことを意味します。その親プロセスはまだ実行中であり、その死んだ子に気付いていません。
kill -9 PID 動作しません(すでに死んでいます)。
この子プロセスの親を特定するには、次のコマンドを実行します。
ps -ef | grep defunct
 UID  PID **PPID** C STIME TTY TIME     CMD
 1000 637  27872   0 Oct12 ?   00:00:04 [chrome] <defunct>
親が誰であるかを確認します。 ps ax | grep 27872
あなたが望むなら、あなたは親を殺すことができます、そして、死んだ人はなくなります。
kill -9 27872
より技術的な理由については、JFセバスチャンの回答を参照してください。
@ Paddington's answerに加えて、この機能をbashrcに追加して、簡単に確認できるようにしました。
defunct(){
    echo "Children:"
    ps -ef | head -n1
    ps -ef | grep defunct
    echo "------------------------------"
    echo "Parents:"
    ppids="$(ps -ef | grep defunct | awk '{ print $3 }')"
    echo "$ppids" | while read ppid; do
        ps -A | grep "$ppid"
    done
}
次のようなものを出力します。
子供達: UID PID PPID C STIME TTY TIME CMD ユーザー25707 25697 0 2月26日pts / 0 00:00:00 [sh] ユーザー30381 29915 0 11:46 pts / 7 00:00:00 grepの機能停止 ------------------------------ 親: 25697ポイント/ 0 00:00:00 npm
kill -9 PIDしない」と述べています。部分的には真実です。実際には、殺すことはできません。また、-9は最後の手段として使用する必要があります。99%の確率で、親プロセスのデフォルトの強制終了はそれを強制終了し、すべての子プロセスを刈り取ります。「デフォルトの強制終了」はSIGTERM(-15)です。-9のファン(SIGKILL)がstackoverflow.com/questions/690415/