Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 检查进程是否正在运行_Linux_Bash_Process_Grep - Fatal编程技术网

Linux 检查进程是否正在运行

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”包含单

我正在尝试检查进程是否正在运行。如果它正在运行,我希望返回值为“OK”,如果不是,则返回值为“not OK”。如果正确的话,我只能在没有附加任何其他参数的情况下使用“ps”(例如ps-ef)。我的密码是:

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
$