kill,pkill和killall有什么区别


31

我熟悉kill命令,大多数时候我们只使用kill -9强制杀死一个进程,还有很多其他的信号可以使用kill。但是我不知道pkilland 的用例是什么killall,如果已经有kill命令。

这样做pkillkillall使用kill在执行命令?我的意思是说,它们只是包装器kill还是它们自己的实现?

我也想知道pgrep命令如何从进程名称中获取进程ID。

所有这些命令都使用相同的基础系统调用吗?从性能角度来看,哪个更快?


2
两件事:为什么kill -9默认使用?-15(请停止)和-1(调制解调器已挂断,请彻底关闭自己)的礼貌得多。其次。当心在非Linux机器上使用killall。它的行为可能有所不同。(例如,在solaris上,它会杀死所有进程。在进程名上未过滤)。
汉尼斯,2015年

Answers:


31

kill命令是kill 系统调用的非常简单的包装器,该系统调用仅知道进程ID(PID)。pkill并且killall也是kill 系统调用(实际上是直接调用系统调用的libc库)的包装,但可以根据诸如进程名称,进程所有者,会话ID等之类的信息为您确定PID。

如何pkillkillall工作可使用可见ltracestrace他们。在Linux上,它们都读取/proc文件系统,并为找到的每个pid(目录)遍历路径,从而通过其名称或其他属性来标识进程。从技术上讲,这是如何完成的,具体取决于内核和系统。通常,他们从中读取/proc/<PID>/stat包含命令名称的第二字段。对于pkill -fpgrep检查/cmdline每个PID的proc条目的条目。

pkillpgrep使用readproc系统调用,而killall不会。我不能说是否存在性能差异:您必须自己对它进行基准测试。


2

kill和killall是提供一种杀死进程的工具。第一个通过其PID,第二个通过其名称。pgrep(列表)和pkill(默认情况下为kill)是提供通过其名称或其他属性向进程发送消息的方法的工具,请参见:http : //linux.die.net/man/1/pkill 有关更多信息信号:http : //linux.die.net/man/7/signal


您是说killall用来杀死进程吗?它为此使用pgrep?并killall杀死所有子进程,?killall默认情况下使用什么信号?
Ijaz Ahmad Khan 2015年

3
...除非您在Solaris上,否则killall将杀死您有权杀死的所有进程,因此,如果您是root用户,则可以有效地重新引导服务器。
珍妮D

1
是的:killall chromium会杀死铬的过程,pgrep chromium会给你PID列表,pkill chromium会杀死铬。killall将默认发送SIGTERM信号(作为pkill)
dervishe 2015年
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.