云网牛站
所在位置:首页 > Linux教程 > Linux中采用bash脚本之用ps和grep判断进程是否在运行解决方案

Linux中采用bash脚本之用ps和grep判断进程是否在运行解决方案

2021-02-03 10:56:40作者:enforcee稿源:深度站

本文介绍一个bash脚本技巧,可使用ps和grep判断进程是否在运行,在Deepin Linux系统中实测通过。

 

详细的解决方案

如果用命令的话,那还不容易,直接 ps aux | grep '进程名' 不就完事啦。参考用which、nohup、ps、pgrep、pidof、top、kill、pkill来管理进程

但是如果在脚本中有这个需求的话,就要麻烦一点了。把这个命令在终端打一遍就发现问题了:

$ ps aux | grep 'blender'

enforcee      37292 32.5  3.4 1202564 277696 ?      Sl   23:56   0:01 blender

enforcee      37380  0.0  0.0   9476  2320 pts/0    S+   23:56   0:00 grep --color=auto blender

由于bash管道的运行原理,grep会先于ps运行,这样grep就会把自己也grep出来。这样即便进程没有运行,grep也会找到内容(他自己),就像这样:

$ ps aux | grep 'blender'

enforcee      40870  0.0  0.0   9476  2188 pts/0    S+   00:00   0:00 grep --color=auto blender

注:这样就很难判断两个结果的区别。

解决方法很简单,只需要用方括号括上一个字母就可以了:

$ ps aux | grep '[b]lender'

enforcee      43307 20.8  3.4 1210888 273876 ?      Sl   00:02   0:01 blender

原理就是grep内置的正则表达式,[几个字母]代表这个式子匹配括号内的任何一个字母,而括上一个字母就只能匹配这一个。括号[]如果不加反斜线转义不当作字符匹配。

这样就可以简单使用返回值$?判断进程的运行情况了,如果grep找到了进程返回值为0,反之为1。

注:grep支持的正则表达式可以通过man grep。

 

相关主题

Shell脚本学习(Linux命令行)第二十章:正则表达式

精选文章
热门文章