web-dev-qa-db-ja.com

ゾンビプロセス(子プロセスと親プロセスの両方を殺す)

質問:子プロセスと親プロセスの両方が強制終了され、成功したかどうかを確認します。私は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;
4
user3613649

ゾンビを殺すことはできません。すでに死んでいます。親プロセスが終了ステータスを読み取るためにwait(2)を実行する前に、プロセステーブル内のエントリを話しているだけです。

別の注意として、任意のプロセス(ゾンビを含む)の親プロセスを強制終了するには、コマンドpskillの組み合わせを簡単に使用できます。

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

また、どうしても必要でない限り、SIGKILLkill -9)を使用しないでください。プロセスがクリーンアップを実行できず、望ましくない効果が生じる可能性があります。

3
heemayl