我正在尝试检查进程是否正在运行。如果它正在运行,我想要一个'OK'的返回值,如果不是返回值'Not OK'。如果这是正确的术语,我只能使用'ps'而不附加任何其他参数(例如ps -ef)。我的代码是:
if ps | grep file; then echo 'OK'; else echo 'NO'; fi
这个问题是它没有搜索确切的过程并且总是返回'OK',我不希望出现所有信息我只是想知道文件是否存在。
答案 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视为一个过程。