命令kill $$
应该杀死当前的bash,但似乎它不起作用:
$ ps -p $$
PID TTY TIME CMD
18179 pts/4 00:00:00 bash
$ kill $$
$ ps -p $$
PID TTY TIME CMD
18179 pts/4 00:00:00 bash
为什么?
答案 0 :(得分:8)
我不确定为什么会想kill
当前的shell。尽管如此...
kill PID
会发送SIGTERM
。在没有任何陷阱的情况下,bash
会忽略SIGTERM
和SIGQUIT
。
如果您要说
,您将获得所需的效果kill -9 $$
或
kill -SIGKILL $$
引用manual:
当Bash是交互式的时候,在没有任何陷阱的情况下,它会忽略
SIGTERM
(以便'kill 0
'不会杀死交互式shell),以及 捕获并处理SIGINT
(以便等待内置 中断)。当Bash收到SIGINT
时,它就会突然出现 执行循环。在所有情况下,Bash都会忽略SIGQUIT
。
答案 1 :(得分:0)
当您使用kill命令向任何信号发送进程时,进程可以根据需要选择处理信号。 (有一些信号无法处理。)
使用kill $$
时,实际上是在传递信号= 15(SIGTERM)。它可以由一个过程处理。
您可以谷歌linux signal example了解它是如何实施的。
&安培;回答你的问题: 如果传递一个不可处理的信号,如SIGKILL(9)或SIGSTOP(19),它将分别杀死/停止正在运行的bash进程。