检查进程是否正在运行

时间:2010-02-04 14:10:17

标签: linux bash process grep

我正在尝试检查进程是否正在运行。如果它正在运行,我想要一个'OK'的返回值,如果不是返回值'Not OK'。如果这是正确的术语,我只能使用'ps'而不附加任何其他参数(例如ps -ef)。我的代码是:

if ps | grep file; then  echo 'OK'; else  echo 'NO'; fi

这个问题是它没有搜索确切的过程并且总是返回'OK',我不希望出现所有信息我只是想知道文件是否存在。

7 个答案:

答案 0 :(得分:10)

您的代码始终返回'OK',因为grep在进程列表中找到自己('grep file'包含单词'file')。修复就是做一个`grep -e [f] ile'(-e用于正则表达式),它找不到自己。

答案 1 :(得分:6)

为实际问题备用grep

ps -C file

避免完全使用grep的问题。

答案 2 :(得分:2)

ps | grep -q '[f]ile'

答案 3 :(得分:1)

当我知道我喜欢的pid时:

[ -d /proc/<pid> ] && echo OK || echo NO

答案 4 :(得分:1)

&#34; pgrep&#34;?

$ pgrep -x foo
xxxx
$

其中xxxx是以名称foo运行的二进制文件的pid。如果foo没有运行,则没有输出。

此外:

  

$ if [[pgrep -x foo]];然后回声&#34;是&#34 ;;否则回声&#34;不&#34; ;网络连接;

将打印&#34;是&#34;如果foo正在运行; &#34;无&#34;如果没有。

请参阅pgrep手册页。

答案 5 :(得分:0)

if ps | grep file | grep -v grep;
then echo 'ok';
else echo 'no';

grep -v grep确保您获得的结果不是执行中的grep语句。

答案 6 :(得分:-1)

还有一个grep的解决方案:

if [ "$(ps aux | grep "what you need" | awk '{print $11}')" == "grep" ]; then
...
elif [ ... ]; then
...
else
...
fi

这在Debian 6中运行良好,不确定其他发行版。需要'{print $11}',因为系统也将grep视为一个过程。