如果2个tomcat正在运行,请获取pid

我有2个tomcat正在运行,如果两个都有类似的名字,我怎么得到这个pid

ps -ef | grep java root 12952 1 0 10:01 pts/0 00:00:03 /usr/lib/jvm/jre/bin/java -Djava.util.logging.config.file=/usr/local/realbid/tomcat-realbid-ws/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/realbid/tomcat-realbid-ws/endorsed -classpath /usr/local/realbid/tomcat-realbid-ws/bin/bootstrap.jar -Dcatalina.base=/usr/local/realbid/tomcat-realbid-ws -Dcatalina.home=/usr/local/realbid/tomcat-realbid-ws -Djava.io.tmpdir=/usr/local/realbid/tomcat-realbid-ws/temp org.apache.catalina.startup.Bootstrap start root 12995 1 0 10:02 pts/0 00:00:03 /usr/lib/jvm/jre/bin/java -Djava.util.logging.config.file=/usr/local/realbid/tomcat-realbid/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/realbid/tomcat-realbid/endorsed -classpath /usr/local/realbid/tomcat-realbid/bin/bootstrap.jar -Dcatalina.base=/usr/local/realbid/tomcat-realbid -Dcatalina.home=/usr/local/realbid/tomcat-realbid -Djava.io.tmpdir=/usr/local/realbid/tomcat-realbid/temp org.apache.catalina.startup.Bootstrap start root 13317 12252 0 10:12 pts/0 00:00:00 grep java 

如果我使用基本的grep,我得到了两个pid(s)

 echo `ps aux | grep 'tomcat-realbid' | grep -v grep | awk '{ print $2 }'` 12952 12995 

有没有办法只得到tomcat-realbid的pid?

你可以使用一个反向grep:

 ps aux | grep 'tomcat-realbid' | grep -v 'tomcat-realbid-ws' 

这将基本上过滤与tomcat-realbid的过程,然后再次过滤删除任何有tomcat-realbid-ws,你已经使用反向grep来删除原始的grep。 最终结果可能如下所示:

 echo ps aux | grep 'tomcat-realbid' | grep -v 'tomcat-realbid-ws' | grep -v grep | awk '{ print $2 }' 

尝试

 ps auxwww | grep "/tomcat-realbid/" 

有点短:

 pgrep 'tomcat-realbid[^(-ws)]*$' 

search没有结尾-ws tomcat-realbid并打印pid。

也许尝试:

 pgrep tomcat-realbid 

通常awk可以做grep所做的事情,所以你可以把所有的命令join一个:

 ps -ef | awk '/java/ && /tomcat-realbid / {print $2}' 

这将得到所有包含javatomcat-realbid (注意最后的空格,只是为了得到你想要的)。 对于那些笔划线,它打印第二个字段。