【问题标题】:Check ps aux process [duplicate]检查ps aux进程[重复]
【发布时间】: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 本身,而将状态绑定到锁定文件可以防止名称冲突变得有意义。

标签: bash shell


【解决方案1】:

在 cmets 中有几个关于其他方法的好建议。要回答您的具体问题,有一个技巧可以使用:

ps aux|grep '[p]aramount'

grep 支持正则表达式。这是因为正则表达式 [p]aramount 与字符串 paramount 匹配,但与字符串 [p]aramount 不匹配。

[p]aramount 放在引号中很重要,如上所示,这样bash 在传递给grep 之前不会破坏它。

【讨论】:

    猜你喜欢
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 2013-07-25
    • 2012-03-11
    相关资源
    最近更新 更多