我正在检查进程是否正在运行。如果它正在运行,我想要一个返回值'OK',如果不是返回值'Not OK'。如果这是正确的术语,我只能使用没有附加任何其他参数的'ps'(例如ps -ef)。我的代码是:检查进程是否正在运行
if ps | grep file; then echo 'OK'; else echo 'NO'; fi
这里的问题是,它并没有搜索精确的过程,总是返回“OK”,我不希望所有的信息出现我只是想知道,如果该文件是否存在。
我正在检查进程是否正在运行。如果它正在运行,我想要一个返回值'OK',如果不是返回值'Not OK'。如果这是正确的术语,我只能使用没有附加任何其他参数的'ps'(例如ps -ef)。我的代码是:检查进程是否正在运行
if ps | grep file; then echo 'OK'; else echo 'NO'; fi
这里的问题是,它并没有搜索精确的过程,总是返回“OK”,我不希望所有的信息出现我只是想知道,如果该文件是否存在。
您的代码总是返回'OK',因为grep发现自己在进程列表中('grep文件'包含单词'file')。解决办法是做一个`grep -e [f] ile'(-e用于正则表达式),它不会找到它自己。
ps | grep -q '[f]ile'
备用grep
真正的问题:
ps -C file
避免使用grep
完全的问题。
有使用grep的解决方案,以及:
if [ "$(ps aux | grep "what you need" | awk '{print $11}')" == "grep" ]; then
...
elif [ ... ]; then
...
else
...
fi
这工作正常,在Debian的6,不知道其他发行版。需要'{print $11}'
,因为系统也将grep视为一个过程。
当我知道PID我更喜欢:
[ -d /proc/<pid> ] && echo OK || echo NO
if ps | grep file | grep -v grep;
then echo 'ok';
else echo 'no';
的grep -v grep的可以确保你得到的结果是不是在执行grep的声明。
那么“pgrep”呢?
$ pgrep -x foo
xxxx
$
其中xxxx是名为FOO二进制运行的PID。如果foo没有运行,那么没有输出。
另外:
$如果[[
pgrep -x foo
]];然后回显“是”;否则回显“否”;网络连接;
如果foo正在运行,将打印“是” “否”,如果不是。
请参阅pgrep手册页。