「Trap...INT TERM EXIT」は本当に必要ですか?

「Trap...INT TERM EXIT」は本当に必要ですか?

traptrap ... INT TERM EXITクリーニング作業の多くの例。しかし、3つのシグスペックをすべてリストすることは本当に必要ですか?

マニュアルによると:

SIGNAL_SPECがEXIT(0)ARGの場合、シェルを終了したときに実行されます。

SIGINTこれは、スクリプトが正常に完了したか、または受け取ったために適用されると思いますSIGTERM。実験を通して私の信念も確認された。

$ cat ./trap-exit
#!/bin/bash
trap 'echo TRAP' EXIT
sleep 3
$ ./trap-exit & sleep 1; kill -INT %1
[1] 759
TRAP
[1]+  Interrupt               ./trap-exit
$ ./trap-exit & sleep 1; kill -TERM %1
[1] 773
TRAP
[1]+  Terminated              ./trap-exit

それでは、なぜそれほど多くの例がそれらをすべてリストするのでしょうかINT TERM EXIT。それとも私が何かを見逃しているのか、EXIT足の裏がそれを見逃す場合があるのか​​?

ベストアンサー1

はい、少し違います。

EnterSIGINTこのスクリプトは押すか送信すると終了しますSIGTERM

trap '' EXIT
echo ' --- press ENTER to close --- '
read response

[次へ]をクリックするとスクリプトが終了しますEnter

trap '' EXIT INT TERM
echo ' --- press ENTER to close --- '
read response

*テスト対象シェン吹くジッシュ。 (これ以上適用されません。シェントラップ実行コマンドを追加するとき)


そして@Shawnが言ったことは次のとおりです。禁煙健康増進協会そしてスプリントキャプチャ信号を使用しないでくださいEXIT

EXITしたがって、強力な信号処理のために完全に捕捉するのを避け、次のものを使用することをお勧めします。

cleanup() {
    echo "Cleaning stuff up..."
    exit
}

trap cleanup INT TERM
echo ' --- press ENTER to close --- '
read var
cleanup

おすすめ記事