如何测试进程是否在bash中使用grep运行?

时间:2014-05-05 16:46:59

标签: linux bash shell

我有命令:

ps ax | grep my_application

哪个输出一个大字符串,包括my_application中涉及的proccesses的端口。

如果my_application未运行,则输出:

3873 pts/0    S+     0:00 grep my_application

我需要一个条件来测试ps ax | grep my_application的输出,并在my_application仍在运行时执行exit 2

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

您可以添加括号以排除grep进程:

ps ax | grep -q '[m]y_application' && exit 2

如果my_application正在运行,ps ax将打印my_application以及grep命令和模式。 Grep将[m]理解为字符类,但它与'[m]'打印的文字字符串ps ax不匹配,因此不包括grep进程。

答案 1 :(得分:1)

最简单的解决方案是使用pgrep,如果它在您的系统上可用。

否则,您可以自定义ps报告流程的方式。您不必使用默认格式,其中包括(某些)命令行参数。

例如:

ps ax -ocomm

只会输出可执行文件名。如果你也想要pids,

ps ax -opid,comm

为方便点击,您可能需要删除标题

ps ax -opid=,comm=

其中任何一个都应该可以正常作为grep application_name的输入,尽管您仍然需要注意application_name是另一个应用程序名称的子字符串。

man ps应该为您提供可能的输出字段列表。它们很多。

答案 2 :(得分:0)

您可以使用以下内容从grep返回的结果中排除内容:

ps ax | grep my_application | grep -v grep

这排除了当您的应用程序未运行时返回的进程,该进程显示grep正在运行。当它运行并且您的应用程序未运行时,它将不返回任何内容。检查空字符串,然后退出。