Ctrl + Cを押すと、ターミナルウィンドウが完全に閉じます。理由/方法は何ですか?

Ctrl + Cを押すと、ターミナルウィンドウが完全に閉じます。理由/方法は何ですか?

ターミナルでCtrl + Cを実行するとターミナルウィンドウを完全に閉じるプロセスがありますが、なぜこれが起こるのかを知っている人はいますか?

プロセスは次のように始まります。

exec "$(dirname "$0")/suman-shell"    # a

以前に開始された方法は次のとおりです。問題ありません。

"./$(dirname "$0")/suman-shell"       # b

execを使用すると、ターミナルウィンドウが閉じているように見えますが、なぜ信号を受信した後に閉じずに閉じaますか?b

ベストアンサー1

通常、すべてのコマンド(シェル組み込みではない)はサブシェルで実行されます。つまり、基本プロセスが分岐して新しいプロセスがコマンドを実行している間、基本プロセスは通常、子プロセスが完了するのを待ちます。

これが、シグナル転送に加えて、子プロセスが基本プロセスに影響を与えることができない理由です。

組み込みシェルを使用してコマンドを実行すると、基本プロセスは分岐せずにexecコマンドになります(syscallを介してexecve())。したがって、コマンドが終了した後に戻ってくる基本プロセスはありません。

ターミナルエミュレータの観点からは、シェルが終了したため(execコマンドが終了した後)ウィンドウが閉じます。

おすすめ記事