189 8069 5689

linux怎么检查进程是否存在

linux怎么检查进程是否存在?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

我们提供的服务有:成都网站建设、做网站、微信公众号开发、网站优化、网站认证、都匀ssl等。为上千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的都匀网站制作公司

这个问题看起来好像很简单,"ps -ef | grep xx"一下就行啦!这样做当然可以,但是如果我们考究起性能来,这恐怕不是个好办法。

假设我们现在要监测某进程是否存活,每分钟检查一次,用上面的办法就要每分钟运行一次ps命令并且做一次grep正则查找。这点开销在服务器上似乎不算什么,然而如果我们要在同一节点上同时监测数十个、数百个这样的进程又如何呢?

所以,我们有必要从性能的角度出发,发掘一些更好的办法。

对于daemon进程,通常都会有自己的pid或者lock文件,我们可以检查这些文件是否存在来判断进程是否存在。然而有些异常情况下,pid文件存在进程却并不存在。因此并不能依赖进程的pid文件来检测进程是否存活。

一种可靠的方法是使用"kill -0 pid",kill -0不会向进程发送任何信号,但是会进行错误检查。如果进程存在,命令返回0,如果不存在返回1。

[sw@gentoo ~]$ ps
  PID TTY          TIME CMD
pts/0    00:00:00 bash
pts/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 $?
1
[sw@gentoo ~]$

当然,如果你用特权用户执行kill命令的话,就没有权限问题啦。

关于linux怎么检查进程是否存在问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。


分享标题:linux怎么检查进程是否存在
URL标题:http://cdxtjz.cn/article/ppdicj.html

其他资讯