使用终端杀死 shell

使用终端杀死 shell
echo $$ 

它告诉 shell 的 PID。因此,如果我使用以下命令终止此 shell

kill 123 #suppose 123 is PID of shell

实际上什么也没发生,我试过了。我再次运行

echo $$

并且 shell 在相同的 PID 下运行。为什么 shell 没有停止?如果 shell 被终止会发生什么?

答案1

主要原因是 shell 是为了捕获TERM信号而构建的。此行为是有记录的。引用 bash 4.3 手册:

信号

当 bash 处于交互状态时,如果没有任何陷阱,它会忽略 SIGTERM(因此 kill 0 不会终止交互 shell),并且会捕获和处理 SIGINT(因此 wait 内置命令是可中断的)。在所有情况下,bash 都会忽略 SIGQUIT。如果作业控制有效,bash 会忽略 SIGTTIN、SIGTTOU 和 SIGTSTP。

man kill

终止的默认信号是 TERM。

现在,如果您指定kill -KILL $$,什么确实会杀死您的 shell,并且一旦控制 shell 退出 - 这将关闭终端。选项-9-KILL-SIGKILL都是同一kill信号的别名,这就是这三个中的任何一个都可以工作的原因,并且是 Siguza 在评论中指出的别名之一。

与 M. Becerra 所说的相反,这与窗口本身无关,因为窗口 PID 总是与 shell 的不同:

# Shell PID
$ cat /proc/self/status  | grep '^Pid:'                                                                                  
Pid:    7058
$ echo $$                                                                                                                
14709
# GUI window PID
$ xdotool getactivewindow getwindowpid 
2774

相关内容