SIGQUITはbashスクリプトを終了する効果はありませんか?

SIGQUITはbashスクリプトを終了する効果はありませんか?
#!/bin/bash --

echo "$$"

LC_ALL=C sed 's/[!-~]/b/g' /tmp/bigfile > /tmp/outfile

echo end of script

QUIT送信信号を使用すると、Ctrl + \次のような結果が出力されます。

# ./script.sh
6739
^\./script.sh: line 5:  6740 Quit                    LC_ALL=C sed 's/[!-~]/b/g' /tmp/bigfile > /tmp/outfile
end of script

期待どおりに終了sedし、コアダンプが発生しますが、スクリプトは続行されます。これが予想される動作ですか? andを使用していbashますが、ashnot dashorを使用してこれが私に起こりましたksh93

ベストアンサー1

はい、bash無視してくださいSIGQUIT。から引用手動(強調):

3.7.6 信号

Bashがインタラクティブのときにトラップなしで無視されSIGTERMkill 0インタラクティブシェルが終了しないように)、キャプチャされて処理されます(組み込みコマンドが中断されるようにSIGINT)。waitBashがそれを受け取ると、SIGINT実行ループから外れます。すべての場合において、Bashは無視します。SIGQUIT。ジョブ制御が適用される場合、Bashは、およびSIGTTINSIGTTOU無視しますSIGTSTP

これは非標準の動作であり、他のほとんどのシェルではこれを行いません。


説得力がないと思われる場合は、ソースコードを見てください:shell_initialize()- > initialize_signals(0)- > initialize_shell_signals()- >set_signal_handler (SIGQUIT, SIG_IGN)無条件で呼び出されますmain()

おすすめ記事