Linux kill 命令

Linux中的命令用于向一个进程或一组进程发送信号。 不幸的是,这个名字被选为 kill,而不是信号,不一定要杀死一个进程。 正如我们将看到的,根据传递给它的值,它会向 Process / Process 组发送适当的信号。

目录

1. Linux kill 命令基本语法

它是一个 C 函数,在 #include <signal.h> POSIX 系统中的头文件。

原函数的形式为 kill(pid_t pid, int signal), 在哪里 pid 是进程的进程 ID(一组进程的组 ID),并且 signal 是要传递的信号类型。

Linux 命令非常相似,格式如下:

root@ubuntu:~# kill -SIGNAL PID

2.查找进程的PID

要获得 PID 的目标进程,使用 ps 命令找到对应的 PID 为进程名称。

root@Ubuntu:~# ps
ps Linux 查找 Pid

要查找所有用户进程(包括守护进程、后台进程)的列表,请使用:

root@Ubuntu:~# ps aux

3. kill 命令——列出所有信号

了解所有可能的信号列表 kill 可以发送,使用 -l (列表)选项。

root@ubuntu:~# kill -l
Linux 杀戮列表示例

在我的系统中,有 64 种可能的信号选择 kill. 每个信号的功能可以参考手册页 signal. (man signal)

在这里,进一步的例子证明了 kill 使用常见信号的命令,例如 SIGINT (Ctrl+C) 和 SIGKILL (Ctrl+Z)。

4. Linux kill 命令——向进程发送信号

一个信号可以以多种格式传递:

  • 使用 Signal 数字(正整数)
  • 使用 Signal 名称与 SIG 字首 (SIGINT 为了 INT (中断)信号)
  • 使用 Signal 没有名字的 SIG 字首 (INT, KILL)

我们可以使用以下任何格式向进程/进程组发送信号:

  • kill -SIGNO PID (前任。 kill -5 101 发送 Signal PID 的 5 号 101
  • kill -SIGNAME PID (前任。kill -SIGINT 101 发送中断 Signal (Ctrl + C) 到 PID 101 )
  • kill -NAME PID (前任。 kill -kill -300 发送中断 Signal (Ctrl + C) 到 进程组 300 )

笔记: 如果 PID value 是负数,这意味着我们指的是一个进程组,而不仅仅是一个进程。 第三 example 显示了这一点。

如果 PID 值为 -1,这是一个特殊值,将信号发送到 每一个 过程 除了 killinit (init 是系统启动时产生的第一个进程,因此是其他所有进程的父进程)

Linux 终止进程示例Linux 终止进程示例

以上 example 使用 kill -SIGKILL PID 命令。 我们得到所有的列表 PID使用 ps 命令,然后发送信号杀死它。

5.kill的默认信号

kill 也可以在不指定的情况下使用 SIGNAL. 这将导致 SIGTERM 作为默认信号传递,这将终止所有匹配的进程。

例子:

kill 21000

这将终止 PID 为 21000 的进程。

6.杀死-9命令

kill -9 PID 命令用于发送 Signal 9号(SIGKILL) 到 PID. 这会杀死相应的进程。

kill -9 21000
杀死 9 命令 Linux 1杀死 9 命令 Linux

7. 按名称杀死进程

我们不能直接将进程名称传递给 kill,所以有两种方法可以实现:

7.1) 使用 killall

格式killall -SIGNAL NAME

killall 命令将信号发送到 全部 匹配给定名称的进程。

killall -9 bash

这发送 Signal 9号(SIGKILL) 到与名称匹配的所有进程 bash.

killall 也可以在不指定的情况下使用 SIGNAL. 这将导致 SIGTERM 作为默认信号传递,这将终止所有匹配的进程。

例子:

killall vim

7.2) 使用 pgrep

我们可以使用 pgrep 输出匹配的命令 PIDs 来自用户进程表的给定进程名称。

pgrep bash

输出:

root@HowLinux:~# pgrep bash
26513
26944
27354

pgrep 从给定用户的完整进程列表中搜索进程名称。

Pgrep 命令 Linux 示例Pgrep 命令 Linux 示例

您可以在使用后传递 PID 列表 pgrepkill.

pgrep vim | xargs kill -SIGINT

这将杀死所有调用的用户进程 vim (通过传递 SIGINT 对他们所有人)

如果您只想匹配第一个进程 id,则使用有限匹配 grep(这 -m 选项)。

root@AskPython:~# pgrep bash | grep -m1 ''
26513

同样,如果要匹配前两个,请使用:

root@AskPython:~# pgrep bash | grep -m2 ''
26513
26944

8. kill vs killall 命令

  • kill 用于发送信号到 进程 ID/组 ID, 尽管 killall 用于向与给定进程匹配的进程列表发送信号 姓名.
  • killall 将信号发送到可能的多个进程,而 kill 仅将信号发送到单个进程/进程组。

9.杀死一个用户的所有进程

我们可以杀死属于一个用户的所有进程 killall-u / (--user) 选项。

root@Ubuntu:~# killall --user USERNAME

这将杀死调用的用户的所有进程 USERNAME.

10. 其他常用的kill Signals

Signal 姓名Signal 价值功能
SIGHUP1挂断
SIGINT2键盘中断
SIGKILL9杀死进程
SIGTERM15终止进程
SIGSTOP17、19、23停止进程

11. 结论

在这篇文章中,我们了解了 kill 命令,用于向进程和进程组发送各种类型的信号。 这是程序员从命令行终止和暂停程序的一种快速简便的方法,因此如果您不熟悉此命令,请务必这样做,因为它是一个非常方便的命令行工具。 希望你发现这篇文章有用!

12. 参考文献