Ija*_*han 55 linux bash kill shell-script
我对kill
command很熟悉,大多数时候我们只是用来kill -9
强行杀死一个进程,还有很多其他信号可以与kill
. 但我想知道pkill
and的用例是什么killall
,如果已经有一个 kill 命令。
在他们的实现中做pkill
和killall
使用kill
命令吗?我的意思是他们只是包装器,kill
或者他们有自己的实现?
我还想知道pgrep
command如何从进程名称中获取进程 ID。
所有这些命令都使用相同的底层系统调用吗?从性能的角度来看有什么区别,哪个更快?
Oth*_*eus 52
该kill
命令是kill
系统调用的一个非常简单的包装器,它只知道进程 ID (PID)。pkill
并且killall
也是kill
系统调用的包装器(实际上是直接调用系统调用的 libc 库),但可以根据进程名称、进程所有者、会话 ID 等为您确定 PID。
使用或使用它们可以看到如何pkill
和killall
工作。在 Linux 上,它们都通读文件系统,并且对于找到的每个 pid(目录),以某种方式遍历路径以通过名称或其他属性识别进程。从技术上讲,这是如何完成的,特定于内核和系统。通常,他们从中读取包含命令名称作为第二个字段的内容。对于并检查每个 PID 的 proc 条目的条目。ltrace
strace
/proc
/proc/<PID>/stat
pkill -f
pgrep
/cmdline
pkill
并pgrep
使用readproc
系统调用,而killall
没有。我不能说是否存在性能差异:您必须自行对其进行基准测试。
更实际的答案:
kill
将为给定进程ID(例如10341)向操作系统发送SIGTERM(终止进程)信号,默认情况下这是SIGTERM。您实际上也可以指定其他信号(例如 -9 强制终止)
killall
将向所有与某个名称完全匹配的进程发送 SIGTERM。它还带有其他好处,例如按用户进行子集化。
pkill
将向所有匹配给定模式的进程发送 SIGTERM。它在底层使用了 pgrep。
归档时间: |
|
查看次数: |
49936 次 |
最近记录: |