为了了解 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