当前位置: 首页>>技术教程>>正文


‘killall’和’pkill’有什么区别?

, ,

问题描述

在Unix系统上使用简单的kill <some_pid>多年后,我从一位年轻的Linux-savvy co-worker同事身上学到了pkill1。

通过slow-downs和比赛条件,我很快接受了Linux-way,pgrep -ing和pkill-许多日夜。这一切都很好。

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

它似乎是一个更有针对性的pkill,但我相信我错过了一些东西。

Ubuntu /Debian-savvy2人员可以解释何时(或为什么)应该使用killall,特别是如果它应该优先于pkill使用(当pkill通常看起来更容易时,因为我可以使用名称匹配,至少默认)。

在谈到killall时,我并没有想到在某些Unix系统(Solaris,AIX,?)会终止所有用户进程的命令。以下是来自a manpage for IBM’s AIX的该版本的说明:

The killall command cancels all processes that you started, except those producing the killall process. This command provides a convenient means of canceling all processes created by the shell that you control. When started by a root user, the killall command cancels all cancellable processes except those processes that started it. If several Signals are specified, only the last one is effective.

1 ‘colleague’是从’co-worker’免费升级,所以不妨。 2原来我以为这是一个Linux或Debian的东西,但有些消息来源说Linux killall是从BSD-flavored Unix派生的。

最佳解决方法

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

Pkill和killall都有不同的选择。 Killall有一个符合进程时间的标志,pkill有一个标志只会杀死给定tty上的进程。等等等等。两者都不是更好,他们只是有不同的专业。

我从他们的手册中看到,killall来自psmisc package,它有几个进程管理实用程序,但显然不包含ps。这是procps package,它有ps,top,kill和pkill(等等)。我打赌procps本来没有pkill,所以psmisc抓了一个痒,并提出了killall。

pkill/pgrep man page表示它们是在Solaris 7中引入的。如您所说,jgbelacqua,Solaris的killall不是psmisc提供的实用程序,因此Solaris可能只有procps软件包。有人想要一个模式匹配处理工具,因此pkill和pgrep。无论是由procps dev开发还是事后添加,我都不知道。无论如何,它已经成为并且成为了所有地方的一部分。

更多来源:

次佳解决方法

请注意”killall”。在某些系统上(我忘记了),killall杀死所有进程。它会默默无视论点,并让你的系统完全停止。

第三种解决方法

如果激活/etc /bash_completion,在killall <part_of_process_name>和hit tab – auto之后,从正在运行的进程列表中完成进程名称

第四种方法

如果你看看这两个程序的选项,你会发现它们都以同样的方式做,但方式不同。

pkill将在进程的各种属性(CMD,PID,PPID,UID …)上执行匹配,并将给定信号发送到每个匹配的进程。 (对于CMD,使用正则表达式,对于其他字符串则为字符串)。 pkill不是交互式的,但对批处理程序更好。

killall将在进程名称(comm)或用户(user)上执行匹配,而不是在整个命令字符串上。该参数用作一个简单的字符串,并且必须与整个’comm’值相匹配(还有一个–regexp选项可以更改此值)。 killall有–interactive和–younger-than选项,pkill没有。

还有一个来自SysV天的killall5被移植到其他UNIX变种(据说在Ubuntu包’sysutils’下)。这在旧时尚方式中表现不同。这在init脚本内部经常用于关闭或更改为single-user模式。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/720.html,未经允许,请勿转载。