pkill 和 Killall 有什么区别?

pkill 和 Killall 有什么区别?

我知道pkill比 具有更多的过滤规则killall。我的问题是,以下之间有什么区别:

pkill [signal] name

killall [signal] name

我读过这killall更有效,可以杀死与name程序匹配的所有进程和子进程(并递归地)。 pkill也不做这个吗?

答案1

pgreppkillSun 的 Solaris 7 中引入了实用程序,g33klord 指出,它们采用一个模式作为参数,该模式与正在运行的进程的名称相匹配。虽然pgrep仅打印匹配进程的列表,但pkill会将指定的信号(或SIGTERM默认情况下)发送到进程。当您想要小心并首先使用 来查看匹配进程的列表,然后继续使用 来终止它们时,pgrep和之间的通用选项和语义会派上用场。并由提供pkillpgreppkillpgreppkill过程包,它还提供其他/proc文件系统实用程序,例如ps,top,free,uptime除其他外。

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

还有其他差异。killall例如,该命令具有按年龄( -o--older-than-y--younger-than)匹配进程的选项,同时pkill可以被告知仅终止特定终端上的进程(通过该-t选项)。显然,这两个命令都有特定的定位。

请注意,killall对系统后代的命令Unix系统V(尤其太阳的索拉里斯,IBM的AIX惠普的HP-UX)杀死全部可由特定用户杀死的进程,如果由 root 运行,则有效地关闭系统。

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

答案2

pkill是值得教导后代的,既因为您提到的过滤器,又因为它与高度可重用的pgrep.它们以相同的方式终止进程,并且都不以递归方式终止 - 尽管使用pgrep,您可以按会话(每个 tty,想想 setid)或进程组(想想作业控制)进行选择。

答案3

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

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

答案4

我刚才发现的一个区别是pkill -u接受 uid。但killall -u将 uid 视为用户名。

> killall -u 13081
Cannot find user 13081

相关内容