trap
trap ... 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