检查进程是否正在运行

我正在尝试检查一个进程是否正在运行。 如果它正在运行,我想要返回值“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视为一个进程。