ctrl+c 完全关闭终端窗口 - 为什么/如何?

ctrl+c 完全关闭终端窗口 - 为什么/如何?

我有一个进程,当我在终端中发出 ctrl+c 时,它会完全关闭终端窗口,有人知道为什么会发生这种情况吗?

该过程现在是这样开始的:

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

以前是这样启动的,没有问题:

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

看起来确实是使用 exec 导致终端窗口关闭,那么为什么在收到信号后会a关闭终端窗口,而不是 呢?b

答案1

通常,所有命令(不是 shell 内置命令)都在子 shell 中执行,即主进程分叉,新进程执行(成为)命令,而主进程(通常)等待子进程完成。

这就是为什么(除了发送信号之外)子进程不能影响主进程的原因。

如果命令是使用内置 shell 启动的,exec那么主进程不会分叉,而是会变成命令(通过 syscall execve())。因此,在命令退出后,不再有主进程可返回。

从终端仿真器的角度来看,shell 已退出(命令exec退出后),因此窗口关闭。

相关内容