私のbashスクリプトはバックグラウンドでいくつかのプログラムを実行しており、waitコマンドで停止するのを待っています。ただし、バックグラウンド プロセスが大量のメモリを消費するため、強制終了される可能性が高くなります。穏やかに終了したプロセスと強制終了したプロセスに対して、スクリプトの反応が異なるようにします。この状態を確認するにはどうすればよいですか?
3 に答える
6
コマンドが成功した場合は成功 (終了コード 0) を通知し、失敗した場合は失敗 (ゼロ以外) を通知するようにしてください。
プロセスが OOM キラーによって SIGKILL で強制終了されると、シグナルの失敗は自動的に行われます。(シェルは、シグナルで終了したプロセスの終了コードを 128 + シグナル番号と見なすため、SIGKILL の場合は 128+9=137 になります)。
wait somepid
次に、 if ステートメントで待機するコマンドと同じコードで終了するという事実を使用します。
yourcommand &
pid=$!
....
if wait $pid
then
echo "It exited successfully"
else
echo "It exited with failure"
fi
于 2013-07-23T02:47:55.357 に答える
1
通常、シグナルでシャットダウンするか、予期しないシャットダウンを処理するシグナル ハンドラー機能を持たせるか、最悪の場合、タスク マネージャーなどの別の監視プロセスを使用します。
何か試しましたか?
ちなみに、セグメンテーション違反、SIGSEGVなど、一部のシグナルは処理できません。
于 2013-07-23T01:00:30.270 に答える
0
より簡単な解決策は
yourcommand
if [ $? -eq 0 ] ; then
echo "It exited successfully"
else
echo "It exited with failure, exitcode $?"
fi
于 2016-11-09T20:49:55.473 に答える