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

使用 Linux 系统,有时会看到一个程序或命令进程卡死时(失去响应)。当出现这种情况时,终止这个卡死进程可能是唯一的办法。这时你将会用到 Linux 提供的命令行工具,它就是 kill 命令。

本教程里,我们通过易懂的举例讨论 kill 命令的简单用法。讲解之前,值得一提的是本文所有的例子都在 Ubuntu 16.04 LTS 系统上运行通过。

Linux kill 命令

kill 命令通常用于终止一个进程。系统内部实现是通过按照指定发送给进程一个信号,命令工具提供一些不同的信号发送。下面是命令语法:

kill [options] <pid> [...]
# kill [命令选项] <进程id> [...] 

下面是命令的手册页描述(译成中文):

默认的终止信号是 TERM 。使用 -l 或 -L 命令选项列出有效的信号。 常用信号包括:HUP , INT , KILL , STOP , CONT 和 0 。替换默认信号使用命令选项有3种方法: -9 , -SIGKILL , -KILL 。负的 PID 值被用于指定一组进程;可在 ps 命令的 PGID 表头列部分找到。 一个值为 -1 的 PID 意指除发送终止信号的进程和 init 进程外的所有进程。

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

问1. 使用 kill 命令如何终止进程?

非常简单,只要知道想终止进程的 PID ,将 pid 作为参数运行 kill 命令。

kill [pid]

举例,我想终止我系统中的 'gthumb' 进程。 首先,通过 ps 命令找出进程的 pid ,然后在终端中将它传给 kill 命令。演示如下:

How to terminate a process using kill command

问2. 如何发送用户(非默认)信号?

在介绍环节已提到, TERM(终止)是 kill 命令发给进程的默认信号。然而,你可以通过 -s 命令选项指定自己想发的信号。

kill -s [signal] [pid]
# kill -s [信号值] [进程标识 pid]

举例,如果一个进程不响应 TERM 信号(这个信号指示进程退出前做清理动作),你可以给它发 KILL 信号(这个信号直接终止进程,并不会让进程退出前做清理动作)。下面是使用它的场景:

kill -s KILL [pid]

问3. kill 命令都能发什么信号?

当然,下面的命令将显示 kill 命令可以发什么信号。谢天谢地,kill 命令的命令选项 -l 将会显示出所有 kill 命令可发送的信号列表。

$ kill -l

如下图示输出显示出我们系统中 kill 可发送的所有信号列表:

What all signals you can send using kill

问4. 有否其它方法发送相同的信号?

之前的例子,我们例示了若发送 KILL 信号,可用如下命令:

kill -s KILL [pid] # 信号 KILL 是列表中 SIGKILL 去掉 SIG

然而,还有一些其它可替换的信号值的写法:

kill -s SIGKILL [pid] #直接使用列表中的 SIGKILL 信号名字符串
kill -s 9 [pid] #使用列表中信号名前所示的信号值的数字  "9) SIGKILL"

相应的信号代表的数字值,在之前的例子中使用 -l 命令选项已显示出。

问5. 如何一条命令终止所有运行进程?

在用户想终止所有可终止的进程(依赖用户特权级),替代输入大量的进程 pid 的简单方法是指定进程 pid 值为 -1 。(见前面的手册说明)

举例:

$ kill -s KILL -1

结论

kill 命令简单直接,很好理解。 稍有难度的是列出的信号术语的具体含义,但这里也解释了最常用的。实践本篇讲解及例子,你会运用得够好。

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

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