[Share Experiences] 【bash脚本技巧】用ps和grep判断进程是否在运行
Tofloor
poster avatar
enforcee
deepin
2021-02-03 08:09
Author

如果用命令的话,那还不容易,直接 ps aux | grep '进程名' 不就完事啦。

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

$ 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。

 

 

Reply Favorite View the author
All Replies
enforcee
deepin
2021-02-03 08:10
#1

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

或者直接上网搜索'grep 正则表达式'就能看了

Reply View the author
Fredoong
deepin
2021-02-03 21:18
#2

课代表总结:利用Regular Expression

Reply View the author
字甲达宾
deepin
2021-02-04 04:45
#3

期待下集...

Reply View the author