シェルがkill -s TERMで終了しないのはなぜですか?

シェルがkill -s TERMで終了しないのはなぜですか?
#!/bin/sh

trap 'trap - EXIT; echo exit' EXIT
trap 'echo term; exit' TERM

sleep 100 

killシェルプロセスのPIDでスクリプトを実行しても終了しません。 TERMトラップを削除して同じ操作を実行すると、シェルは終了します。なぜ?同様sleep 100にに置き換えると、sleep 100 & waitシェルは終了しますkill

答え1

シェルは、特定のチェックポイント(コマンドの最後)でのみ未解決のトラップをチェックし、暗黙的に実行されているコマンドを待つ場合は、そのチェックポイントの直前にあります。

一方、この信号を使用しない場合は、trap .... TERMプロセス(シェルも含む)を終了するデフォルトの動作として信号が使用されます。

を使用すると、trap .... TERMSIGTERM に対する基本的な信号動作がなくなり、シェルがシャットダウンするのを防ぎます。

関連情報