Linux: убить процесс на основе аргументов


55

Как я могу убить процесс на основе аргументов его командной строки? killall, pgrepИ , pkillпохоже, работать только на основе имени процесса.

Мне нужно это, чтобы иметь возможность различать количество приложений, работающих на виртуальных машинах Java, где javaимя процесса для всех них и фактическое имя приложения можно найти, посмотрев на аргументы командной строки.

Это можно сделать вручную, ps aux | grep myapp.jarа затем вручную убить pid из вывода, но я бы хотел, чтобы команда делала что-то эквивалентное автоматически.

Ответы:


70

pgrep/ pkillвзять -fфлаг. Со manстраницы:

-f    The pattern is normally only matched against the process name.
      When -f is set, the full command line is used.

Например:

$ sleep 30& sleep 60&
[1] 8007
[2] 8008

$ pkill -f 'sleep 30'
[1]  - terminated  sleep 30

$ pgrep sleep
8008

+1, но мой bash 4.1.5 не работает для двоеточия после амперсанда (как в первой строке примера) ... bash: syntax error near unexpected token ';'... Он работает в операторе case, когда за амперсандом следует ;;... может быть вы используете другую оболочку (?)
Peter.O

@ jw013 Я фактически использовал zsh, который поддерживает синтаксис, который я использовал. Оставляя это, работает в обоих, хотя, так что я удалил это
Майкл Мрозек

@MichaelMrozek тогда ладно, nvm :) Интересно, у unix.SE более высокая доля zshпользователей, чем где-либо еще? Кажется, я только нахожу zshздесь пользователей.
jw013

4

Вы можете использовать, htopчтобы просмотреть все запущенные в данный момент процессы с их аргументами командной строки и убить выбранный процесс.


4

Замените argumentниже на регулярное выражение, которое должно полностью соответствовать командной строке процесса:

kill `ps -eo pid,args --cols=10000 | awk '/argument/ && $1 != PROCINFO["pid"] { print $1 }'`

0

Если у вас нет pkill или чего-то еще, просто используйте proc / [1-9] * / cmdline

grep -a myapp.jar /proc/[1-9]*/cmdline|tr '\0' ' '|grep -v grep|awk -F/ '{print $3}'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.