如果用命令的话,那还不容易,直接 ps aux | grep '进程名' 不就完事啦。
但是如果在脚本中有这个需求的话,就要麻烦一点了。把这个命令在终端打一遍就发现问题了。
$ ps aux | grep 'blender'enforcee 37292 32.5 3.4 1202564 277696 ? Sl 23:56 0:01 blenderenforcee 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
或者直接上网搜索'grep 正则表达式'就能看了
期待下集...
Featured Collection
Popular Events
如果用命令的话,那还不容易,直接 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。