Linux 进程管理:Linux killall 命令 0 个改进

我们已经讨论了 kill 命令 ,它可以终止 Linux 中的进程。然而,存在其它你可使用的命令行工具完成相同的任务: killall 命令。本篇指南,我们将使用浅显的例子讨论这些命令的基本用法。

讲解之前,值得一提的是本文所有的例子都在 Ubuntu 18.04 LTS 系统上运行通过。

Linux killall 命令

killall 命令可让你通过程序名终止进程。下面是它的命令语法:

killall [OPTIONS] name
# killall [选项] 启动进程命令名称

下面是其手册页相关解释(译成中文):

killall 发送信号给所有以某个命令启动的进程。命令中若没指定发送的信号,默认发送 SIGTERM 。信号既可以使用信号名(例如: -HUP 或 -SIGHUP)也可使用数字(例如:-1),还可使用 -s 选项。如果启动进程命令名称既不是正则匹配(-r 选项)且不含一斜杠(/),那么通过那个命令名称启动的进程会被选中终止。在名称列表中对应的一个或多个进程,只要有任一个进程被成功终止, killall 都会返回 0 。同样,若没有名称而是通过 -u 或 -Z 选项进行搜索过滤来的,只要有任一进程被终止,killall 都返回 0 。否则,返回非 0 值。一个由 killall 命令启动的进程永远不会干掉自己(但可终止其它 killall 进程)。

跟随以下问与答(Q&A)方式的例子使你更好理解 killall 命令的使用。

问1. 如何运用 killall 命令?

命令基本使用非常简单 - 你要做的是把启动进程的命令名称作为参数传递给 killall 命令。举例,终止在我系统中运行的 gthumb 进程,使用如下命令:

$ killall gthumb

注意,这里若你不知道进程名,可以使用 ps 命令找到它。

问2. killall 大小写敏感吗?

是的,若因传递的名称大小写问题造成匹配错误,killall 将会抛出 '没有进程被找到(no process found)' 错误提示。举例如下:

Is killall case-sensitive

然而,你可以通过 -I 选项让 killall 忽略大小写。(译注:原文插图错误,这里忽略大小写的选项是大写的 i ,读者可能难分辨 -I-l,其实分别是大写的 i 和小写的 L)

Killall ignore case

问3. 如何使 killall 终止进程前提示?

假如你想在终止进程前,killall 提示你将终止哪个进程,你可以使用 -i 命令选项。这使killall 命令成为交互(interactive)模式。

举例:

How to make killall ask before terminating process

问4. 如何选择 killall 命令发送的信号?

默认, killall 发送 SIGTERM 信号给终止进程。你也可选择发什么信号,使用 -s--signal 命令选项或 -SIGNAL 直接信号名的方式。

但是,你得知道信号的名称都是什么。 这可以使用 -l 选项显示所有信号名称。语法如下:

killall -l

下面是使用命令列出我系统中所有信号名称:

How to choose the signal killall sends to process

问5. 如何阻止 killall 抱怨找不到进程?

如果传递给 killall 命令的进程名指定进程未运行(进程不存在),killall 命令会输出错误提示。

prevent killall from complaining if specified process doesn't exist

然而,如果你不想它显示这样的信息,你可以使用 -q 命令选项, q安静(quiet) 的意思。

killall -q command option

你看到,当使用 -q 命令选项时,killall 命令保持沉默。

问6. 如何终止一个用户下的所有进程?

如果有一个需求要杀死某个用户的所有进程,你可以使用 killall 命令提供的 -u 选项。不用多说,该选项要求在选项后面输入用户的名字。

killall -u [user-name]

例如:

killall -u himanshu

问7. 如何根据时间选项来终止进程?

假设现在你想终止运行超过 5 小时以上的所有进程,你可以使用 -o 选项来实现该操作。例如:

killall -o 5h

当然,如果你只想终止某个运行小于 4 小时的特定的进程,则可以使用 -y 命令选项来处理。

killall -y 4h

手册上关于这些选项的解释:

-o, --older-than
             仅匹配开始运行的时间比选项时间大的的进程。时间为浮点数和单位组成。单位是 s,m,h,d,w,M,y 分别代表的意思是 秒,分,小时,天,周,月,年。

 -y,--younger-than
               仅匹配开始运行的时间比选项时间小的的进程。时间为浮点数和单位组成。单位是 s,m,h,d,w,M,y 分别代表的意思是 秒,分,小时,天,周,月,年。

问8. 如何确保 killall 命令在终止的进程完全终止后返回?

killall 命令传递信号给指定进程后,如果你要确保指定进程完全终止后, killall 命令再返回,可以使用命令选项 '-w' ,它迫使 killall 命令一直等待确保指定进程终止后再返回。

killall -w [process-name]

下面是 killall 命令 man 手册的相关解释(译成中文):

-w, --wait
              等待所有要求终止的进程完全终止。killall 每隔 1 秒去检查。
              确保没有一个指定终止进程仍在运行。
              注意,若被指定终止的进程忽略 killall 发送的信号或信号无效,
              又或指定终止进程是个僵尸进程,将导致 killall 一直等待。

结论

killall 命令对新手可能不好啃,但它也不是那么复杂。你需要多实践它的各个命令选项。我们已讨论它们中主要的,因此,本指南可以作为你很好的开始。

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!