微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – kill,pkill和killall有什么区别

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

pkill和killall在其实现中使用kill命令吗?我的意思是他们只是包装杀人或他们有自己的实施?

我还想知道pgrep命令如何从进程名称获取进程ID.

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

解决方法:

kill命令是kill系统调用一个非常简单的包装器,它只知道进程ID(PID). pkill和killall也是kill系统调用的包装器(实际上,直接调用系统调用的libc库),但可以根据进程名称,进程所有者,会话ID之类的内容确定PID.等

使用ltrace或strace可以看到pkill和killall如何工作.在Linux上,它们都读取/ proc文件系统,并且对于找到的每个pid(目录),以一种通过其名称或其他属性标识进程的方式遍历路径.从技术上讲,这是如何完成的,内核和系统特定的.通常,它们从/ proc /< PID> / stat读取,其中包含命令名称作为第二个字段.对于pkill -f和pgrep,检查每个PID的proc条目的/ cmdline条目.

pkill和pgrep使用readproc系统调用,而killall则没有.我不知道是否存在性能差异:你必须自己进行基准测试.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐