5

该命令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

为什么?

4

2 回答 2

11

我不确定为什么要kill使用当前的外壳。尽管如此...

kill PIDSIGTERM未指定信号时 将发送。bash忽略SIGTERM并且SIGQUIT没有任何陷阱。

如果你说,你会达到预期的效果

kill -9 $$

或者

kill -SIGKILL $$

引用手册

当 Bash 是交互式的时,在没有任何陷阱的情况下,它会忽略 SIGTERM(因此 '<code>kill 0' 不会杀死交互式 shell),并被 SIGINT捕获和处理(因此内置的 wait 是可中断的)。当 Bash 收到 aSIGINT时,它会跳出任何正在执行的循环。在所有情况下,Bash 都会忽略SIGQUIT.

于 2013-07-10T08:48:26.397 回答
0

当您使用 kill 命令向进程发送任何信号时,该进程可以根据自己的意愿选择处理信号。(有一些信号,无法处理。)

当您使用 时kill $$,您实际上是在传递信号=15(SIGTERM)。它可以由一个进程处理。

您可以在 google 上搜索linux 信号示例以了解它是如何实现的。

& 回答您的问题:如果您传递一个不可处理的信号,例如 SIGKILL(9) 或 SIGSTOP(19),它将分别杀死/停止正在运行的 bash 进程。

于 2013-07-10T08:49:25.110 回答