Linux 检查进程是否正在运行
我正在尝试检查进程是否正在运行。如果它正在运行,我希望返回值为“OK”,如果不是,则返回值为“not OK”。如果正确的话,我只能在没有附加任何其他参数的情况下使用“ps”(例如ps-ef)。我的密码是:Linux 检查进程是否正在运行,linux,bash,process,grep,Linux,Bash,Process,Grep,我正在尝试检查进程是否正在运行。如果它正在运行,我希望返回值为“OK”,如果不是,则返回值为“not OK”。如果正确的话,我只能在没有附加任何其他参数的情况下使用“ps”(例如ps-ef)。我的密码是: if ps | grep file; then echo 'OK'; else echo 'NO'; fi 问题是,它不搜索确切的流程,总是返回“OK”,我不希望所有信息都显示出来,我只是想知道文件是否存在。您的代码总是返回“OK”,因为grep在流程列表中(“grep file”包含单
if ps | grep file; then echo 'OK'; else echo 'NO'; fi
问题是,它不搜索确切的流程,总是返回“OK”,我不希望所有信息都显示出来,我只是想知道文件是否存在。您的代码总是返回“OK”,因为grep在流程列表中(“grep file”包含单词“file”)。修复方法是执行“grep-e[f]ile”(-e表示正则表达式),它找不到自己。Spare
grep
用于解决实际问题:
ps | grep -q '[f]ile'
ps -C file
避免了同时使用
grep
的问题 grep也有一个解决方案:
if [ "$(ps aux | grep "what you need" | awk '{print $11}')" == "grep" ]; then
...
elif [ ... ]; then
...
else
...
fi
这在Debian6中运行良好,但对其他发行版不太确定<代码>{print$11}'是必需的,因为系统也将grep视为一个进程。当我知道pid时,我更喜欢:
[ -d /proc/<pid> ] && echo OK || echo NO
[-d/proc/]和&echo OK | | echo NO
grep-v grep确保您得到的结果不是正在执行的grep语句。那么“pgrep”呢
其中xxxx是以名称foo运行的二进制文件的pid。如果foo没有运行,则没有输出
此外:
$if[[pgrep-xfoo
]];然后回应“是”;否则回应“否”;fi
如果foo正在运行,将打印“是”;如果不是,请回答“否”
请参阅pgrep手册页
if ps | grep file | grep -v grep;
then echo 'ok';
else echo 'no';
$ pgrep -x foo
xxxx
$