“killall”和“pkill”有什么区别?

bel*_*qua 96 command-line process

使用只是普通后kill <some_pid>在Unix系统上多年,我学会pkill从一个年轻的Linux精明的同事同事1

我很快就接受了Linux的方式,pgrep-ing并pkill通过多少个日日夜夜-ing,通过缓慢起伏和比赛条件。这一切都很好。

但现在我什么也看不到killall。How-to 似乎只提到了killall,我不确定这是否是某种并行开发,或者是否killall是 的继任者pkill,或者其他什么。

它似乎更具有针对性pkill,但我确定我遗漏了一些东西。

一个 Ubuntu/Debian-savvy 2人能否解释什么时候(或为什么)killall应该使用,特别是如果它应该优先使用pkillpkill通常看起来更容易,因为我可以更草率地匹配名称,至少在默认情况下)。

说到killall,我没有想到在某些 Unix 系统(Solaris、AIX、?)上会杀死所有用户进程的命令。以下是IBM 的 AIX 联机帮助页中对该版本的描述:

killall 命令取消您启动的所有进程,除了那些产生 killall 进程的进程。此命令提供了一种取消由您控制的 shell 创建的所有进程的便捷方法。当由 root 用户启动时,killall 命令会取消所有可取消的进程,但启动它的进程除外。如果指定了多个信号,则只有最后一个有效。

1个“同事”是从“同事”免费升级的,所以也可以。
2本来我以为这是Linux或者Debian的东西,但是有消息说Linuxkillall是从BSD风格的Unix派生出来的。

dje*_*kyb 72

我认为您在 how-to 中看到了 killall,因为默认情况下它需要精确的进程名称,而 pkill 进行基本的模式匹配。因此,killall 对于用户盲目复制和粘贴更安全。

Pkill 和 killall 都有不同的选项。Killall 有一个标志来匹配进程年龄,pkill 有一个标志来只杀死给定 tty 上的进程。等等。两者都不是更好,他们只是有不同的专业。

我从他们的手册页中看到 killall 来自psmisc 包,它有几个进程管理实用程序,但值得注意的是不包含ps. 它是具有 ps、top、kill 和 pkill(等等)的procps 包。我敢打赌 procps 最初没有 pkill,所以 psmisc 挠痒痒并想出了 killall。

pkill的/ p纤ep手册页说,他们在Solaris中7中引入正如您所提到,jgbelacqua,的Solaris的killall不是工具提供Psmisc做,这样的Solaris大概只用了procps的包。有人想要一个模式匹配过程工具,即 pkill 和 pgrep。不知道是procps dev开发的还是后来加进去的。无论如何,它成功进入并成为*nixes 的一部分。

更多来源:

  • @manish - 呃,SysV 系统上有一个不同的 killall。 (6认同)
  • @Manish:pkill(不杀死)不需要pid号,也不需要进程名。它确实与进程名称匹配。 (5认同)
  • “killall 对用户盲目复制和粘贴更安全”,除非您使用的是 killall 确实会杀死所有人的机器。不幸的是,这两个不同的实用程序具有相同的名称。 (3认同)

小智 7

请小心“killall”。在某些系统上(我忘了是哪个),killall 会杀死所有进程。它会默默地忽略参数并使您的系统完全停止。

  • 正如现在在原始问题中提到的那样,在 SysV 系统上确实如此。 (7认同)
  • 这不是真的。没有任何参数的 killall 将什么也不做,并且 killall 不会忽略这些参数。`kill -9 -1` 可能会杀死你的系统,而 `killall -9 -1` 也可能会杀死你的系统。但不仅仅是“killall [程序]” (6认同)

jet*_*jet 5

如果激活 /etc/bash_completion,然后killall <part_of_process_name>点击 Tab - 自动完成正在运行的进程列表中的进程名称

  • pgrep/pkill 将完成相同的自动完成。当我知道我暂时没有任何想要使用的东西但仍然想积极使用 Firefox 时,我通常做的事情是 `pkillplug&lt;tab&gt;` 来杀死 Firefox 的 Flash 插件。这是 shell 的一个功能,与killall 和pgrep/pkill 之间没有区别。 (2认同)