bashでシグナル処理を記述するサンプルコードを理解しようとしています。例32-7のhttp://tldp.org/LDP/abs/html/debugging.htmlでは、作者のコメントはSIGINTを捕捉していると述べていますが、トラップはEXIT用です。バックグラウンドプロセスでSIGINTをトラップする
{ trap "exit" SIGUSR1 sleep $interval; sleep $interval while true; do ... done; } & # Start a progress bar as a background process. pid=$! trap "echo !; kill -USR1 $pid; wait $pid" EXIT # To handle ^C.
なぜEXITのトラップはSIGINT(CTL-C)にbackgroudのプロセスに正しい信号(SIGUSR1)を送信しますか?
これがなぜ機能するのかご理解いただきありがとうございます。
いいえ、それはプロセスが 'exit(2)'自身を(スクリプトの終わりに達するか、明示的な「終了」命令の実行)。 – fge
これを適切に処理するには、スクリプトに 'trap 'exit 127' 2 15'のようなものが必要です。 – tripleee
ああ。とった。さらにテストした後、キーボード割り込みでINTのトラップが実行され、EXITのトラップが発生したことがわかりました。 – user1131035