【问题标题】:Check if process is running检查进程是否正在运行
【发布时间】:2010-02-04 14:10:17
【问题描述】:
我正在尝试检查进程是否正在运行。如果它正在运行,我想要一个“OK”的返回值,如果不是“Not OK”的返回值。如果那是正确的术语,我只能在不附加任何其他参数的情况下使用“ps”(例如 ps -ef)。我的代码是:
if ps | grep file; then echo 'OK'; else echo 'NO'; fi
这样做的问题是它不搜索确切的过程并且总是返回'OK',我不希望出现所有信息我只想知道文件是否存在。
【问题讨论】:
标签:
linux
bash
process
grep
【解决方案1】:
您的代码总是返回“OK”,因为 grep 发现自己在进程列表中(“grep file”包含单词“file”)。一个修复方法是执行 `grep -e [f]ile'(-e 表示正则表达式),它不会找到自己。
【解决方案2】:
备用grep 解决实际问题:
ps -C file
完全避免了使用grep 的问题。
【解决方案4】:
当我知道我喜欢的 pid 时:
[ -d /proc/<pid> ] && echo OK || echo NO
【解决方案5】:
“pgrep”呢?
$ pgrep -x foo
xxxx
$
其中 xxxx 是以名称 foo 运行的二进制文件的 pid。如果 foo 没有运行,则没有输出。
还有:
$ if [[ pgrep -x foo ]];然后回显“是”;否则回显“否”;菲;
如果 foo 正在运行,将打印“yes”;如果不是,则为“否”。
参见 pgrep 手册页。
【解决方案6】:
if ps | grep file | grep -v grep;
then echo 'ok';
else echo 'no';
grep -v grep 确保你得到的结果不是正在执行的 grep 语句。
【解决方案7】:
grep 也有一个解决方案:
if [ "$(ps aux | grep "what you need" | awk '{print $11}')" == "grep" ]; then
...
elif [ ... ]; then
...
else
...
fi
这在 Debian 6 中运行良好,不确定其他发行版。 '{print $11}' 是必需的,因为系统也将 grep 视为一个进程。