Bash脚本进程名称正则表达式

时间:2010-09-24 08:12:48

标签: regex bash unix grep

我正在尝试基于进程名称的部分进行正则表达式进程id。如果我只做一个单词似乎有效,但是当我尝试做类似的事情时它失败了:找到任何带路径/开头的进程 ** / endswiththis /

这是我到目前为止所拥有的:

QUEUE_PID="$(ps -ef | grep endswiththis | grep -v $0 | grep -v grep | awk '{ print $2 }')";   

有什么想法? 谢谢, 史蒂夫

1 个答案:

答案 0 :(得分:5)

现在很多UNIX都有pgrep,它完全符合您的要求

DESCRIPTION
   pgrep  looks  through the currently running processes and lists the process IDs which
   matches the selection criteria to stdout.  All the criteria have to match.

举个例子:

$ps -ef | grep sendmail
simonp    6004 27310  0 09:16 pts/5    00:00:00 grep sendmail
root      6800     1  0 Jul19 ?        00:00:03 sendmail: accepting connections
smmsp     6809     1  0 Jul19 ?        00:00:01 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue

$pgrep sendmail
6800
6809

传递给pgrep的参数是一个正则表达式 - 它与可执行文件名或依赖于参数的完整进程参数字符串(-f)匹配。

$pgrep  '^sen.*il$'
6800
6809

$pgrep -f '^sendmail.*connections$'
6800

了解更多信息

man pgrep