
这个问题看起来好像很简单,”ps -ef | grep xx”一下就行啦!这样做当然可以,但是如果我们考究起性能来,这恐怕不是个好办法。
假设我们现在要监测某进程是否存活,每分钟检查一次,用上面的办法就要每分钟运行一次ps命令并且做一次grep正则查找。
这点开销在服务器上似乎不算什么,然而如果我们要在同一节点上同时监测数十个、数百个这样的进程又如何呢?(推荐学习:linux教程)
所以,我们有必要从性能的角度出发,发掘一些更好的办法。
对于daemon进程,通常都会有自己的pid或者lock文件,我们可以检查这些文件是否存在来判断进程是否存在。然而有些异常情况下,pid文件存在进程却并不存在。因此并不能依赖进程的pid文件来检测进程是否存活。
存了个图
视频图片解析/字幕/剪辑,视频高清保存/图片源图提取
17 查看详情
一种可靠的方法是使用”kill -0 pid”,kill -0不会向进程发送任何信号,但是会进行错误检查。如果进程存在,命令返回0,如果不存在返回1。
[sw@gentoo ~]$ ps PID TTY TIME CMDpts/0 00:00:00 bashpts/0 00:00:00 ps[sw@gentoo ~]$ kill -0 15091[sw@gentoo ~]$ echo $?[sw@gentoo ~]$ kill -0 15092-bash: kill: (15092) - No such process[sw@gentoo ~]$ echo $?[sw@gentoo ~]$
但是,这种方法对于普通用户来说只能用于检查自己的进程,因为向其它用户的进程发送信号会因为没有权限而出错,返回值也是1。
[sw@gentoo ~]$ kill 2993-bash: kill: (2993) - Operation not permitted[sw@gentoo ~]$ echo $?[sw@gentoo ~]$
当然,如果你用特权用户执行kill命令的话,就没有权限问题啦。
以上就是查看linux查看进程是否存在的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/629419.html
微信扫一扫
支付宝扫一扫