Answers:
在pgrep
和pkill
公用事业Sun的Solaris 7进行了介绍,并为g33klord指出,他们采取的模式作为其对正在运行的进程的名称相匹配的说法。虽然pgrep
仅打印匹配进程的列表,但pkill
会将指定信号(或SIGTERM
默认情况下)发送到进程。常用选项之间的语义pgrep
和pkill
派上用场的时候,你要小心,并首先回顾与列表匹配过程pgrep
,然后继续与杀害他们pkill
。pgrep
和pkill
由所提供的procps的包,其中还提供了其它/proc
的文件系统实用程序,例如ps
,top
,free
,uptime
等等。
该killall
命令由psmisc软件包提供,其不同之处pkill
在于,默认情况下,在确定将发送信号的过程时,它与参数名称完全匹配(最多前15个字符)。的-e
,--exact
选项可以指定还需要精确匹配为超过15个字符的名称。这使得killall
有些更安全比使用pkill
。如果指定的参数包含斜杠(/
)字符,则该参数将解释为文件名,并且将运行该特定文件的进程选择为信号接收者。killall
还通过-r
,--regexp
选项支持过程名称的正则表达式匹配。
也有其他差异。的killall
例如命令具有用于按年龄匹配过程选项(-o
,--older-than
和-y
,--younger-than
),而pkill
可以告诉只杀死特定终端(经由上的进程-t
选项)。显然,这两个命令具有特定的优势。
请注意,killall
从Unix System V派生的系统上的命令(特别是Sun的Solaris,IBM的AIX和HP的HP-UX)会杀死所有可由特定用户杀死的进程,从而有效地关闭了由root用户运行的系统。
Linux psmisc实用程序已移植到BSD(以及Mac OS X扩展名)中,因此killall
遵循“按名称杀死进程”的语义。
killall -u <username> -r <process>
或者pkill <process> -U <uid>
这使killall
我更容易使用。