У меня работает 2 кота, как мне получить 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
?
Вы могли бы использовать обратный 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 }'
Как обычно awk
может делать то, что grep
делает, поэтому вы можете объединить все команды в одну:
ps -ef | awk '/java/ && /tomcat-realbid / {print $2}'
Это получает все эти строки, содержащие оба java
и tomcat-realbid
(обратите внимание на пробел в конце, чтобы получить тот, который вам нужен). Для этих совпадающих строк он печатает второе поле.
Может попробовать:
pgrep tomcat-realbid
Чуть короче:
pgrep 'tomcat-realbid[^(-ws)]*$'
Ищет tomcat-realbid
без конца -ws
и печатает pid.
Пытаться
ps auxwww | grep "/tomcat-realbid/"