该命令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
为什么?
我不确定为什么要kill
使用当前的外壳。尽管如此...
kill PID
SIGTERM
未指定信号时 将发送。bash
忽略SIGTERM
并且SIGQUIT
没有任何陷阱。
如果你说,你会达到预期的效果
kill -9 $$
或者
kill -SIGKILL $$
引用手册:
当 Bash 是交互式的时,在没有任何陷阱的情况下,它会忽略
SIGTERM
(因此 '<code>kill 0' 不会杀死交互式 shell),并被SIGINT
捕获和处理(因此内置的 wait 是可中断的)。当 Bash 收到 aSIGINT
时,它会跳出任何正在执行的循环。在所有情况下,Bash 都会忽略SIGQUIT
.
当您使用 kill 命令向进程发送任何信号时,该进程可以根据自己的意愿选择处理信号。(有一些信号,无法处理。)
当您使用 时kill $$
,您实际上是在传递信号=15(SIGTERM)。它可以由一个进程处理。
您可以在 google 上搜索linux 信号示例以了解它是如何实现的。
& 回答您的问题:如果您传递一个不可处理的信号,例如 SIGKILL(9) 或 SIGSTOP(19),它将分别杀死/停止正在运行的 bash 进程。