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