Signals

ctrl+c 完全關閉終端視窗 - 為什麼/如何?

  • November 5, 2017

我有一個程序,當我在終端中發出 ctrl+c 時,它會完全關閉終端視窗,有人知道為什麼會這樣嗎?

這就是現在開始該過程的方式:

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

以前是這樣啟動的,沒有問題:

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

看起來使用 exec 是導致終端視窗關閉的原因,那麼為什麼在收到信號後a關閉終端視窗,而不是?b

通常所有命令(不是shell 內置命令)都在子shell 中執行,即主程序分叉,新程序執行(成為)命令,而主程序(通常)等待子程序完成。

這就是為什麼(除了發送信號)子程序不能影響主程序的原因。

如果一個命令是用內置的 shell 啟動的,exec那麼主程序不會派生而是變成命令(通過 syscall execve())。因此,在命令退出後,沒有更多的主程序可​​以返回。

從終端仿真器的角度來看,shell 已經退出(exec命令一退出),因此視窗關閉。

引用自:https://unix.stackexchange.com/questions/402611