Linux 中的 killall 命令

在本教程中,我们将介绍 Linux 中的 killall 命令。 我们最近发布了一个关于 Linux中的kill命令 我们在这里介绍了命令的用法和功能。 今天,我们将回顾一下如何在 Linux 中使用 killall 命令,并了解 kill 和 killall 命令之间的区别。

Linux 中的 killall 命令是什么?

在使用 Linux 系统时,有时您需要终止进程,这就是包装器喜欢的地方 , 杀戮, 和 全杀 进入图片。 killall 命令类似于 kill 命令,它允许我们通过向进程发送终止信号来终止进程。 但是为什么我们需要两个甚至三个命令来完成同一件事呢? 让我们看看 kill 和 killall 命令之间的区别。

Linux中的kill和killall命令有什么区别?

kill 命令是 Linux 上 kill 系统调用的基本包装器,它只了解 PID,需要外部帮助才能将进程转换为 PID。 Linux 中的 killall 命令也是 kill 系统调用的包装器,但它通过在进程名称、用户名等的帮助下确定和传递 PID 来提供额外的帮助。

这两个命令都提供了相同的结果和不同的行为。 一个使用 PID 杀死进程,而另一个也可以使用进程名称。

如何在 Linux 中使用 killall 命令?

我们将首先查看帮助选项的输出,然后讨论允许我们终止进程的最常用的 killall 选项。 在您的 Linux 系统上运行以下命令。

[email protected]:~# killall --help 
Killall 命令帮助选项

killall 命令最基本的用法如下:

[email protected]:~# killall <process name> 

部分被替换为活动进程时,上述命令会找到指定进程的 PID 并将其传递给 kill 系统调用以终止该进程。

到这里才明白? 现在,让我们了解 killall 命令提供的一些选项。

1. killall –exact-match 选项

在服务器上,许多进程可以具有相似的名称,并且您不希望由于不正确的匹配而终止非预期的进程。 为了避免这些情况,我们使用 -e 选项,它允许我们在终止进程之前完全匹配指定的名称。

[email protected]:~# killall -e bash AND  [email protected]:~# killall -e Bash 

在下面的屏幕截图中,我执行了一个 shell 脚本,该脚本在后台多次休眠 10 分钟以进行演示。

Killall 后的进程列表输出
Killall 错误匹配后的进程列表输出Killall 错误匹配后的进程列表输出

如您所见,在第一个屏幕截图中,脚本被终止,因为我们提供了完全匹配的名称, bash,这是执行脚本的外壳。 但是我们第二次以不正确的情况运行命令时,找不到该进程。 请注意:完全按照指定匹配进程名称是 Linux 中 killall 命令的默认行为。 如果您尝试上面的示例而不使用 -e 选项。

2. killall –ignore-case 选项

我们知道,Linux 中 killall 命令的默认行为是完全按照指定的方式匹配进程名称。 但是在进程名称中的大小写未知的情况下,我们可以使用 -I 选项。

[email protected]:~# killall -I BaSH 
Killall I 命令选项Killall I 命令选项

即使指定的大小写与进程名称的实际大小写不匹配,它也会自动终止脚本。

3. killall –younger-than 和 –older-than 选项

我们不仅必须使用名称,还可以使用时间。 如果我们知道有些进程已经运行了很长时间,并且由于更新或任何其他原因我们不希望它们再存在,我们可以使用 -y 或 -o 命令选项。

命令选项的格式如下:

[email protected]:~# killall -y 1(s/m/h/d) <process name> OR  [email protected]:~# killall -o 1(s/m/h/d) <process name> 

默认情况下,我们确实需要指定一个进程名称,但我们还将研究如何在指定的时间内杀死所有进程。 s/m/h/d 代表秒、分钟、小时和天。

Killall Y 命令输出Killall Y 命令输出

正如您在上面的示例中所看到的,在过去 30 秒内启动的所有脚本实例都被终止了。 可以在上面 ps 命令的输出中看到经过的时间,以供参考哪些进程被杀死。

如何在不输入进程名称的情况下杀死指定时间内的所有进程? 我们需要使用正则表达式来杀死一切。

[email protected]:~# killall -y 1m -r ".*" 
Killall Y 与正则表达式匹配Killall -y 与正则表达式匹配

在上面的例子中,我们使用了 (.*) 在正则表达式中用于“一切”。 因此,在过去 1 分钟内启动的所有进程,无论名称如何都会被杀死。

杀死进程时指定信号

默认情况下,如果没有指定信号,killall 会发送 SIGTERM 信号。 这是一个通用信号,可以很容易地被程序阻止、处理或忽略。 这个信号就像要求程序自行终止。

您可以使用 -l killall 的选项。

信号列表 Killall信号列表 Killall

killall 命令可以向程序发送大量信号。 这里对几个常用的进行解释。

  • HUP – 代表挂断。 这会向进程报告网络终端已断开连接
  • INT – 代表中断。 这个信号就像按下中断键(Ctrl+c) 在终端上。
  • 退出 – 代表退出。 这是程序遇到致命错误时产生的信号
  • 患病的 – 代表非法指令。 当非法表达式发送到处理器时,系统会生成此信号。 这是非常罕见的,因为大多数非法表达式在程序编译时被捕获。
  • – 该信号强制终止程序并立即终止。 它不能被进程处理或忽略

要使用我们在上面的屏幕截图中看到的列表中的信号之一,您可以使用以下格式。

[email protected]:~# killall -s HUP <process name> 
Killall 挂断示例Killall 挂断示例

HUP 信号快速终止进程,因为它表示用户不再连接。

Killall 中断信号示例Killall 中断信号示例

中断信号也立即终止进程,因为该信号显式地向进程发送中断键序列。 我添加了 killall——详细 选项,因为 INT 信号不会在输出中显示信号名称。 带有等待的详细选项让我们知道用于终止进程的信号。

Killall 退出信号示例Killall 退出信号示例

在上面的例子中,我使用了 杀死 – 等待 选项,因为 QUIT 信号只是要求进程退出。 但是如果没有 –wait 选项,killall 命令会在发送信号后立即结束。 在上述情况下,不添加 -等待 会导致“Exit 131” 行后显示 bash 提示,因为进程尚未结束。

按用户名杀死进程

我们不仅可以通过进程名称杀死进程,还可以使用用户名。 这 杀戮 -u 选项允许我们指定用户名。

[email protected]:~# killall -u root 

现在,出于显而易见的原因,不建议执行上述命令 因为它会杀死几乎所有保持系统运行的基本服务。

一个有趣的小旁注,当我在尝试复制命令时不小心运行了命令时,我让自己与 ubuntu 服务器断开了连接! 但是,这个特技是在专家监督下进行的。 不要在家里尝试!

结论

所以你现在知道了 如何杀死Linux系统中的进程. 如果您有兴趣了解有关该命令的更多信息,请通过键入来参考此命令的手册页 男人杀戮 在您的终端中。