Bash 检查ps aux进程
当程序运行时,执行ps aux | grep PARAMON可以让我:Bash 检查ps aux进程,bash,shell,Bash,Shell,当程序运行时,执行ps aux | grep PARAMON可以让我: david 80810 95.1 3.6 3113624 599036 s007 RN+ 1:43PM 0:01.54 python ./parse_paramount.py david 80812 0.0 0.0 2432768 600 s011 R+ 1:43PM 0:00.00 grep paramount david 8
david 80810 95.1 3.6 3113624 599036 s007 RN+ 1:43PM 0:01.54 python ./parse_paramount.py
david 80812 0.0 0.0 2432768 600 s011 R+ 1:43PM 0:00.00 grep paramount
david 80809 0.0 0.0 2432768 588 s011 R+ 1:43PM 0:00.00 grep paramount
当程序未运行时,执行相同的命令会使我:
david 80810 95.1 3.6 3113624 599036 s007 RN+ 1:43PM 0:01.54 python ./parse_paramount.py
david 80812 0.0 0.0 2432768 600 s011 R+ 1:43PM 0:00.00 grep paramount
david 80809 0.0 0.0 2432768 588 s011 R+ 1:43PM 0:00.00 grep paramount
如果程序正在运行,如何编写bash脚本以返回true,如果程序未运行,如何编写bash脚本以返回false?注释中对其他方法有一些很好的建议。要回答您的具体问题,请使用以下技巧:
ps aux|grep '[p]aramount'
grep支持正则表达式。这是因为regex[p]aramount与字符串paramont匹配,但与字符串[p]aramount不匹配
如上图所示,将[p]aramount放在引号中很重要,这样bash在将其传递给grep之前不会将其弄坏。不要这样做。请改用pgrep…不过,如果您的目标是在故障时重新启动某个程序,那么您也不应该使用pgrep-您应该使用一个流程监控框架,该框架利用等待调用在其子进程退出时立即获得通知,而无需轮询。其中有很多—runit、daemontools、supervisor、upstart、systemd。。。甚至是带有inittab的SysV init也可以与restart标志一起使用。或者,您可以使用flock的锁文件来更好地了解某个东西是否正在运行,从而保持锁-ps aux方法会给您带来各种误报,例如将vim paramont.py标记为paramont本身,而将状态绑定到锁文件可防止名称冲突产生意义。另请参阅