首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在unix中,如何查找进程是否正在运行并返回true/false?

问在unix中,如何查找进程是否正在运行并返回true/false?
EN

Stack Overflow用户
提问于 2015-01-13 14:35:46
回答 3查看 6.3K关注 0票数 1

我正在编写一个unix脚本,需要检查当前是否正在运行目录中有"xyz“的进程。如果是,请继续下一个命令,并显示类似于"Found“的文本。

如果没有继续并显示文本,如“未找到进程”。

我试过这样的方法:

代码语言:javascript
复制
if ps -ef | grep xyz
then
    echo "XYZ Process Found!"
else
    echo "XYZ Process Not Found!"
fi

但它只是向我展示了进程,并显示了“过程找到”,即使没有xyz进程。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-13 14:39:48

我相信您希望使用命令颠覆检查命令的输出值,从链接的bash黑客wiki到命令替换扩展到命令的输出。这些命令在子These中执行,它们的stdout数据就是替换语法扩展到的数据。此外,数行并移除grep。就像,

代码语言:javascript
复制
if [[ $(ps -ef | grep xyz | grep -v grep | wc -l) != 0 ]]; then
        echo "XYZ Process Found!"
else
        echo "XYZ Process Not Found!"
fi

编辑

根据下面的注释,您可能应该使用

代码语言:javascript
复制
if [[ $(ps -ef | grep -c xyz)  -ne 1 ]]; then

读起来容易多了。

票数 4
EN

Stack Overflow用户

发布于 2015-01-13 15:06:25

当您运行grep xyz时,这个进程-- grep xyz --也在运行&因此,ps -ef的输出显示了这一点。

这个正在运行的进程命令行包含xyz。因此,grep将该行传递给输出。

因此,你总是得到零退出状态--即成功。

2解决方案:

  1. 使用if ps -ef | grep '[x]yz'; then。(您可能希望用grep来抑制-q输出) 正在运行的grep命令是grep [x]yz。这将在ps -ef输出中打印。 显然,grep过滤掉了这一行。[x]yz可以与\[x\]yz匹配,而不能与[x]yz匹配。
  2. 使用if pgrep -f xyz >/dev/null; then 有关更多细节,请查看man pgrep。
票数 3
EN

Stack Overflow用户

发布于 2015-01-13 15:11:41

您也可以使用pgrep。来自pgrep(1)

pgrep查看当前正在运行的进程,并列出与stdout的选择条件匹配的进程ID。 ..。 退出状态 0一个或多个进程符合标准。 1没有匹配的进程。 2命令行中的语法错误。 3致命错误:内存不足等。

示例输出:

代码语言:javascript
复制
[~]% pgrep xterm
18231
19070
31727

可以在if语句中使用它,如下所示:

代码语言:javascript
复制
if pgrep xterm > /dev/null; then
  echo Found xterm
else
  echo xterm not found
fi

注意:pgrep不是一个标准的实用程序(即。它不在POSIX中,但至少可以在Linux上广泛使用,我相信大多数BSD系统都可以使用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27924568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档