我正在尝试基于进程名称的部分进行正则表达式进程id。如果我只做一个单词似乎有效,但是当我尝试做类似的事情时它失败了:找到任何带路径/开头的进程 ** / endswiththis /
这是我到目前为止所拥有的:
QUEUE_PID="$(ps -ef | grep endswiththis | grep -v $0 | grep -v grep | awk '{ print $2 }')";
有什么想法? 谢谢, 史蒂夫
答案 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