ゾンビを収穫するために、次のコマンドを実行します。
/usr/bin/preap $(ps -ef | grep defunct | grep -v grep | awk '{ print $2 }' | xargs)
このアプローチはサービスに影響しますか?
答え1
親ゾンビの前にゾンビを収穫すると、親ゾンビの収穫効果が消えます。これは明らかにアプリケーションによって異なります。
積極的にゾンビを収穫する理由はありません。一部のオペレーティングシステムでは、親プロセスを手動で追跡し、waitpid
システムコールを実行しない限りこれを許可しません。 Solarisはユーティリティを提供しますpreap
が、それを使用する必要がある唯一のケースは、プログラムが予期せず動作してプロセステーブルをゾンビプロセスで埋めるときです。
答え2
スクリプトはゾンビを早期に収穫し、親がゾンビを収穫するのを防ぎ、予期しない動作を引き起こす可能性があります。
このようなゾンビプロセスの存在の根本的な原因を解決できないと仮定すると、合法的な収穫を迂回しないほど長い間(例えば1分)停止状態にあったプロセスだけが収穫されます。
for pid in $(ps -eo pid,s | nawk '$2 == "Z" {print $1 };sleep 60)
do
preap $pid
done
しかし、| xargs
改行文字は有効なパラメータ区切り文字であるため、スクリプトでは役に立ちません。