Kill 命令

17 Mar 2025 | 4 分钟阅读

什么是 kill 命令?

Linux 是一个先进且优秀的操作系统,但它并非完美。有些应用程序可能会开始表现异常,变得无响应,或者开始消耗大量系统资源。

无响应的应用程序无法通过重启来恢复,因为实际的应用程序进程并未完全终止。一种解决方法是重启系统,或者终止该应用程序的进程。

有各种实用工具允许我们使用 **kill** 命令来终止异常进程。这个命令在 Linux 中最为常用。

Linux 中,kill 命令(位于 /bin/kill)可以被定义为一个内置命令。

它用于手动终止进程。kill 命令的行为在不同的 shell 和 **/bin/kill** 独立可执行文件之间略有不同。

我们可以使用 type 命令来显示系统中包含 kill 的所有位置。


Kill command

kill 命令向进程发送一个信号,从而终止该进程。当用户没有指定要发送的信号时,kill 命令会发送 **TERM** 信号(默认),该信号将终止进程。如果未指定信号,则默认为 **-15** (**-TERM**)。

最常用的信号如下:

  • HUP (1)- 重新加载进程。
  • KILL (9)- 终止进程。
  • TERM (15)- 优雅地停止进程。

我们可以使用 kill 命令配合 **-l** 选项来获取所有可用信号的列表。


Kill command

这些信号可以通过三种不同的方式指定。这些方式列在下面:

  • 按数字(例如 -6)
  • 不带 SIG 前缀(例如 -kill)
  • 带 SIG 前缀(例如 -SIGkill)

下面的命令是相互类似的:

  • $ kill -SIGHUP PID_NUMBER
  • $ kill -HUP PID_NUMBER
  • $ kill -1 PID_NUMBER

传递给 kill 命令的 PID 可以是以下任何一个:

  1. 如果 PID 大于零,则信号将被发送到 PID 相同的进程。
  2. 如果 PID 等于零,则信号将被发送到当前进程组中的所有进程。这意味着信号将被发送到与请求 kill 命令的 Shell GID 相关的所有进程。我们可以使用 **ps -efj** 命令来查看进程组 ID (GIDs)。
  3. 如果 PID 等于 -1,则信号将被发送到与请求者相同的 UID 的所有进程。如果请求用户是 root,则信号将被发送到除 kill 和 init 进程之外的所有进程。
  4. 如果 PID 小于 -1,则信号将被发送到进程组中 GID 与 PID 的绝对值相同的进程。

普通用户可以向自己的进程发送信号。但不能发送到与其他用户相关的进程。另一方面,root 用户可以向其他用户的进程发送信号。

  • PID 为 -1 的情况非常特殊,因为它表示除了 init 和 kill 之外的所有进程,而 init 是系统中所有进程的父进程。
  • PID 的负值用于表示进程组 ID。当我们传递任何进程组 ID 时,该组内的所有进程都将收到信号。
  • 要显示正在运行的进程列表,我们可以使用 ps 命令,它将显示正在运行的进程及其 PID 号。我们需要提供 PID 来指定哪个进程应该接收 kill 命令的信号。

语法


Kill command

ps aux: 此命令用于显示所有正在运行的进程及其 PID 和其他详细信息。如果我们不知道进程 ID,可以使用此命令。

Kill command

kill 命令的选项

1. kill -l: 此选项用于显示所有存在的信号,我们可以使用以下命令选项。

语法


Kill command

2. kill pid: 此选项用于演示如何将 PID 与 kill 命令一起使用。

语法


Kill command

3. kill -L: kill -L 命令可用于以表格格式列出存在的信号。

语法


Kill command

4. 翻译信号编号: 我们可以使用以下命令轻松地将任何信号编号翻译成信号名称。


Kill command