我有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}'
这将得到所有包含java和tomcat-realbid (注意最后的空格,只是为了得到你想要的)。 对于那些笔划线,它打印第二个字段。