本文介绍一个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。
相关主题 |