kill vs killall - 区别和命令用法

为了了解 kill 和 killall 命令之间的区别,我们首先需要确保我们了解 Linux 系统上进程背后的基础知识。

进程是一个正在运行的程序的实例。
每个进程都分配有 PID(进程 ID),它对每个进程都是唯一的,因此,不能为两个进程分配相同的 PID。
一旦进程终止,PID 就可以重新使用。
试试下面的例子:

$ yes > /dev/null &
[1] 3706

上面的命令将启动进程的 yes并将其标准输出输出到 /dev/null
我们在这里感兴趣的是第二行,其中包含以下信息“[1]”(作业 ID)和“3706”实际PID。
在 Linux 系统上,我们可以在任何给定时间运行多个进程,并且每个进程都可以根据用户权限使用 kill 或者 killall 命令终止。
让我们开始一些另外的过程:

$ yes > /dev/null &
[2] 3782
$ yes > /dev/null &
[3] 3783
$ yes > /dev/null &
[4] 3784
$ yes > /dev/null &
[5] 3785

从上面你可以看到我们使用yes命令启动了另外的进程,并且每个进程都有不同的PID。
要列出从当前 shell 分叉的所有进程,请使用 jobs命令:

$ jobs
[1]   Running                 yes > /dev/null &
[2]   Running                 yes > /dev/null &
[3]   Running                 yes > /dev/null &
[4]-  Running                 yes > /dev/null &
[5]+  Running                 yes > /dev/null &

kill 与 killall 命令之间的区别在于,使用 kill 命令我们一次只能终止一个进程,而使用 killall 命令我们能够根据给定的条件(例如进程组、进程年龄或者用户所有权)终止多个进程。
让我们使用 kill命令杀死 PID 为 3783 的进程:

$ kill 3783
[3]   Terminated              yes > /dev/null

一个一个地终止每个进程可以证明是一项艰巨而乏味的工作。
让我们看看我们是否可以通过使用 killall 命令和进程名称来获得一些帮助:

$ killall yes
[1]   Terminated              yes > /dev/null
[2]   Terminated              yes > /dev/null
[4]-  Terminated              yes > /dev/null
[5]+  Terminated              yes > /dev/null

如我们所见,所有进程都根据进程名称终止。

日期:2020-07-07 20:54:57 来源:oir作者:oir