【发布时间】:2014-08-11 20:39:12
【问题描述】:
在程序运行时做ps aux|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,如果程序未运行,则返回 false?
【问题讨论】:
-
不要。请改用
pgrep。 -
...尽管如果您的目标是在某些东西出现故障时重新启动它,那么您也不应该使用 pgrep —— 您应该使用利用 wait() 调用的流程监督框架当其孩子退出时,无需轮询即可立即得到通知。其中有很多很多——runit、daemontools、supervisor、upstart、systemd ......甚至 SysV init 以及带有重启标志的 inittab。
-
或者,您可以使用带有
flock的锁文件来更好地了解是否有东西正在运行并持有锁——ps aux方法会给您各种误报,例如将vim paramount.py标记为paramount本身,而将状态绑定到锁定文件可以防止名称冲突变得有意义。