6

プログラムを呼び出すとLinux bashスクリプトでセグメンテーション違反が発生した場合、おそらくスクリプトを停止するためにどうすればよいですか?

4

2 に答える 2

8

プログラムがセグメンテーション違反またはその他のエラーで終了した場合、ゼロ以外の終了コードで終了します。この終了コードをテストし、終了したらスクリプトを終了できます。(セグメンテーション違反だけでなく)エラーで停止したい場合は、次を使用できます。

some-crashy-program args || exit 1

呼び出したプログラムがエラーを返した場合にスクリプトを終了したい場合 ( or ステートメントの一部を除く)ifスクリプトwhileset -e先頭で を呼び出すだけで、コマンドが失敗した場合にスクリプトをすぐに終了させることができます。grepゼロ以外の終了コードが返された場合、予期しない時間にスクリプトが終了する可能性があるため、長期にわたって維持する必要がある大規模なスクリプトでは、この使用法はやや推奨されませんが、迅速な 1 回限りのスクリプトには役立ちます。常にエラーで停止したいことがわかっている場合。

プログラムがセグメンテーション違反でクラッシュした場合にのみ終了したい場合は、他のエラーではなく、特定の終了コードを確認できます。ほとんどのシステムでSEGVは、値は 11 ですが、次の方法で確認できます。

$ kill -l SEGV
11

それに 128 を追加すると、プログラムが終了する終了コードになります。それに対して終了コードをテストして、プログラムが SIGSEGV でクラッシュしたかどうかを確認します。

some-crashy-program args
if [ $? -eq 139 ]; then
    echo "It crashed!"
    exit 1
fi
于 2012-11-19T22:51:43.987 に答える
3

セグメンテーション違反は139リターンコードとして発生します。

おそらく次のようなリターンコードを確認できます。

run_your_thing
if [[ $? -eq 139 ]]; then echo "oops, sigsegv"; fi
于 2012-11-19T23:01:01.800 に答える