Назад | Перейти на главную страницу

Получить pid, если запущено 2 кота (ов)

У меня работает 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/"