![为什么我不能使用从 $$ 特殊变量获取的 PID 来杀死 shell?](https://linux22.com/image/61204/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%B8%8D%E8%83%BD%E4%BD%BF%E7%94%A8%E4%BB%8E%20%24%24%20%E7%89%B9%E6%AE%8A%E5%8F%98%E9%87%8F%E8%8E%B7%E5%8F%96%E7%9A%84%20PID%20%E6%9D%A5%E6%9D%80%E6%AD%BB%20shell%EF%BC%9F%20.png)
在我了解到$$
特殊变量保存了 shell 的进程号后,我也尝试通过简单地杀死 shell:kill <pid obtained by echo $$>
,但这不起作用,我也尝试了一些变体,但它们也没有效果。
答案1
检查 bash 手册:
当 bash 是交互式的时,在没有任何陷阱的情况下,它会忽略 SIGTERM
https://www.gnu.org/software/bash/manual/bashref.html#Signals
检查kill
帮助文本(help kill
在 bash 提示符下):
如果 SIGSPEC 和 SIGNUM 都不存在,则假定为 SIGTERM。
https://www.gnu.org/software/bash/manual/bashref.html#index-kill
答案2
你可以,但是 shell 会努力不死,除非它完全确定这就是所需要的。
SIGHUP 有效(和 SIGKILL 一样),你可以尝试这个 -
kill -HUP $$
(如果您更喜欢数字信号标识符,HUP
可以将其替换为1
。)
起作用的原因SIGHUP
是,这是当调制解调器上的串行线路连接终止时发送的信号 - 例如,如果电话线挂断。