質問:子プロセスと親プロセスの両方が強制終了され、成功したかどうかを確認します。私はbashスクリプトを使用していて、出力に問題があります。
#!/bin/bash
for p in $(ps jauxww | grep Z | grep -v PID | awk '{print $3}'); do
for everyone in $(ps auxw | grep $p | grep cron | awk '{print $2}');do
kill -9 $everyone;
echo(Detected zombie process:"$PID". "$usr": . Successfully Killed);
else
echo (Detected zombie process:"$PID". "$usr": . Could not kill);
done;
done;
ゾンビを殺すことはできません。すでに死んでいます。親プロセスが終了ステータスを読み取るためにwait(2)
を実行する前に、プロセステーブル内のエントリを話しているだけです。
別の注意として、任意のプロセス(ゾンビを含む)の親プロセスを強制終了するには、コマンドps
とkill
の組み合わせを簡単に使用できます。
ps -p <pid> -o ppid=
pID(プロセスID)<pid>
を持つプロセスのPPID(親プロセスID)を使用します。
たとえば、PID 2345
を持つプロセスのPPIDを見つけるには:
ps -p 2345 -o ppid=
コマンド置換$()
を使用して、kill
に渡すことができます。
kill "$(ps -p 2345 -o ppid=)"
一方、PPIDを使用してプロセスを強制終了するには、pkill
を使用します。
pkill -P <PPID>
たとえば、PPID 1234
を持つプロセスを強制終了するには:
pkill -P 1234
また、どうしても必要でない限り、SIGKILL
(kill -9
)を使用しないでください。プロセスがクリーンアップを実行できず、望ましくない効果が生じる可能性があります。