SIGTERMがbashを終了できますが、ashまたはdashを終了できないのはなぜですか?

SIGTERMがbashを終了できますが、ashまたはdashを終了できないのはなぜですか?

比較bashashは次のようにしてのみ終了できdashます。bashSIGTERM

kill -TERM <pid>

そしてash私はbash必要SIGHUPですSIGKILL

kill -HUP <pid>
kill -KILL <pid>

その理由は何ですか?また、動作はシステムによって異なります。

  • bashSIGTERMUbuntu 14.04 Trusty, Ubuntu 16.04 Xenial, Ubuntu 18.04 Bionic, Ubuntu 19.10 Eoan, Ubuntu 20.04 Focal, Debian 8 Jessie, Debian 9 Stretch, Debian 10 Buster, CentOS 8
  • bashはいいいえSIGTERMCentOS 6、CentOS 7で終了

ベストアンサー1

これは、bashが行readline編集ライブラリを使用してユーザー入力を待っている場合にのみ発生します。bash

実行すると、Aはbash --noediting死ぬことはなく、SIGTERM自分で死ぬこともありません。bashkill -TERM $$

readline()これは、ユーザー入力を受け取るbash関数が独自のシグナルハンドラをインストールしてSIGTERM返す前に元のシグナル処理を復元するためです。ユーザー入力を待っている間に発生した場合に返されますSIGTERMreadlinereadline()NULL

readline()()を呼び出すbash関数はreturnをと解釈しyy_readline_get()てシェルを終了します。これはとても似ています。NULLEOF回答

SIGTERMこれは、インタラクティブなbashが設定でも生き残ることができることを意味しますIGNOREEOF;-):

$ bash
$ IGNOREEOF=10
$ echo $$
11096
<kill -TERM 11096 from another terminal>
$ Use "exit" to leave the shell.
<kill -TERM 11096 from another terminal>
$ Use "exit" to leave the shell.
...
<the 10th will get it>
$ exit
$

おすすめ記事