Signals
ctrl+c 完全關閉終端視窗 - 為什麼/如何?
我有一個程序,當我在終端中發出 ctrl+c 時,它會完全關閉終端視窗,有人知道為什麼會這樣嗎?
這就是現在開始該過程的方式:
exec "$(dirname "$0")/suman-shell" # a
以前是這樣啟動的,沒有問題:
"./$(dirname "$0")/suman-shell" # b
看起來使用 exec 是導致終端視窗關閉的原因,那麼為什麼在收到信號後
a
關閉終端視窗,而不是?b
通常所有命令(不是shell 內置命令)都在子shell 中執行,即主程序分叉,新程序執行(成為)命令,而主程序(通常)等待子程序完成。
這就是為什麼(除了發送信號)子程序不能影響主程序的原因。
如果一個命令是用內置的 shell 啟動的,
exec
那麼主程序不會派生而是變成命令(通過 syscallexecve()
)。因此,在命令退出後,沒有更多的主程序可以返回。從終端仿真器的角度來看,shell 已經退出(
exec
命令一退出),因此視窗關閉。