pkill和killall有什么区别?


Answers:


46

pgreppkill公用事业Sun的Solaris 7进行了介绍,并为g33klord指出,他们采取的模式作为其对正在运行的进程的名称相匹配的说法。虽然pgrep仅打印匹配进程的列表,但pkill会将指定信号(或SIGTERM默认情况下)发送到进程。常用选项之间的语义pgreppkill派上用场的时候,你要小心,并首先回顾与列表匹配过程pgrep,然后继续与杀害他们pkillpgreppkill由所提供的procps的包,其中还提供了其它/proc的文件系统实用程序,例如pstopfreeuptime等等。

killall命令由psmisc软件包提供,其不同之处pkill在于,默认情况下,在确定将发送信号的过程时,它与参数名称完全匹配(最多前15个字符)。的-e--exact选项可以指定还需要精确匹配为超过15个字符的名称。这使得killall有些更安全比使用pkill。如果指定的参数包含斜杠(/)字符,则该参数将解释为文件名,并且将运行该特定文件的进程选择为信号接收者。killall还通过-r--regexp选项支持过程名称的正则表达式匹配。

也有其他差异。的killall例如命令具有用于按年龄匹配过程选项(-o--older-than-y--younger-than),而pkill可以告诉只杀死特定终端(经由上的进程-t选项)。显然,这两个命令具有特定的优势。

请注意,killallUnix System V派生的系统上的命令(特别是Sun的SolarisIBM的AIXHP的HP-UX)会杀死所有可由特定用户杀死的进程,从而有效地关闭了由root用户运行的系统。

Linux psmisc实用程序已移植到BSD(以及Mac OS X扩展名)中,因此killall遵循“按名称杀死进程”的语义。


我遇到的主要区别是用户停止了模式命令,killall -u <username> -r <process>或者pkill <process> -U <uid>这使killall我更容易使用。
jeremysprofile

13

pkill由于您提到的过滤器以及将其与高度可重用的配对的事实,因此值得一世代教pgrep。它们以相同的方式杀死进程,也没有递归杀死-尽管使用pgrep,您可以按会话(按tty,思考setsid)或进程组(认为作业控制)进行选择。


8

一个区别是,killall以过程的确切名称作为参数,而pkill可以取部分或完整名称。

您可以参考这个问题来深入了解pkill


1

killall-按名称杀死进程。使用killall命令将信号发送到一个或多个符合选择标准的进程,例如命令名称,特定用户拥有的进程或所有系统范围的进程。

pkill-将指定的信号(默认为SIGTERM)发送到每个进程,而不是在stdout上列出它们。pkill可以发信号通知多个流程,例如killall,但也可以使用高级选择条件,包括以下任意组合:

命令UID父终端

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.