检查进程是否正在运行

发布于 2024-08-20 10:10:03 字数 244 浏览 6 评论 0原文

我正在尝试检查进程是否正在运行。如果它正在运行,我想要返回值“OK”,如果没有运行,则返回值“Not OK”。如果这是正确的术语,我只能使用“ps”而不附加任何其他参数(例如 ps -ef)。我的代码是:

if ps | grep file; then  echo 'OK'; else  echo 'NO'; fi

问题是它不搜索确切的过程并且总是返回“确定”,我不想显示所有信息我只想知道文件是否存在。

I am trying to check if a process is running. If it is running I want a return value of 'OK' and if not a return value of 'Not OK'. I can only use 'ps' without any other arguments attached (eg. ps -ef) if thats the correct term. The code I have is:

if ps | grep file; then  echo 'OK'; else  echo 'NO'; fi

The problem with this is that it does not search for the exact process and always returns 'OK', I don't want all the information to appear I just want to know if the file exists or not.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

甜扑 2024-08-27 10:10:04

grep 替换为真正的问题:

ps -C file

避免完全使用 grep 的问题。

Spare grep for real problems:

ps -C file

avoids the problem of using grep altogether.

深府石板幽径 2024-08-27 10:10:04
ps | grep -q '[f]ile'
ps | grep -q '[f]ile'
夏末的微笑 2024-08-27 10:10:04

那么“pgrep”呢?

$ pgrep -x foo
xxxx
$

其中 xxxx 是以名称 foo 运行的二进制文件的 pid。如果 foo 没有运行,则没有输出。

还:

$ if [[ pgrep -x foo ]];然后回显“是”;否则回显“否”;菲;

如果 foo 正在运行,将打印“yes”;如果没有,就说“不”。

请参阅 pgrep 手册页。

What about "pgrep"?

$ pgrep -x foo
xxxx
$

where xxxx is the pid of the binary running with the name foo. If foo is not running, then no output.

Also:

$ if [[ pgrep -x foo ]]; then echo "yes"; else echo "no" ; fi;

will print "yes" if foo is running; "no" if not.

see pgrep man page.

随梦而飞# 2024-08-27 10:10:04

当我知道 pid 时,我更喜欢:

[ -d /proc/<pid> ] && echo OK || echo NO

When I know the pid I prefer:

[ -d /proc/<pid> ] && echo OK || echo NO
北城半夏 2024-08-27 10:10:04
if ps | grep file | grep -v grep;
then echo 'ok';
else echo 'no';

grep -v grep 确保您得到的结果不是正在执行的 grep 语句。

if ps | grep file | grep -v grep;
then echo 'ok';
else echo 'no';

grep -v grep makes sure that the result you get is not the grep statement in execution.

淡淡的优雅 2024-08-27 10:10:04

grep 也有一个解决方案:

if [ "$(ps aux | grep "what you need" | awk '{print $11}')" == "grep" ]; then
...
elif [ ... ]; then
...
else
...
fi

这在 Debian 6 中工作正常,不确定其他发行版。需要 '{print $11}',因为系统也将 grep 视为一个进程。

There is a solution with grep as well:

if [ "$(ps aux | grep "what you need" | awk '{print $11}')" == "grep" ]; then
...
elif [ ... ]; then
...
else
...
fi

This works fine in Debian 6, not sure about other distros. '{print $11}' is needed, because the sytem treats grep as a process as well.

情话已封尘 2024-08-27 10:10:03

您的代码始终返回“OK”,因为 grep 发现自己位于进程列表中(“grep file”包含单词“file”)。解决方法是执行“grep -e [f]ile”(-e 表示正则表达式),但它找不到自己。

Your code always returns 'OK', because grep finds itself in the process list ('grep file' contains the word 'file'). A fix would be to do a `grep -e [f]ile' (-e for regular expression), which doesn't find itself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文