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


54

Як я можу вбити процес на основі аргументів його командного рядка? killall, pgrepі, pkillздається, працює лише на основі назви процесу.

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

Це можна зробити вручну, ps aux | grep myapp.jarа потім вручну вбити під із виводу, але я хотів би, щоб команда робила щось еквівалент автоматично.

Відповіді:


69

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, але мій баш 4.1.5 не працює для двокрапки після амперсанди (як у першому рядку прикладу) ... bash: syntax error near unexpected token ';'... Це працює у виписці з випадків, коли за амперсандом слідує ;;... можливо ви використовуєте іншу оболонку (?)
Peter.O

@ jw013 Я фактично використовував zsh, що підтримує синтаксис, який я використовував. Однак, якщо вийти з нього, це працює і в обох, і я його усунув
Майкл Мрозек

@MichaelMrozek нормально, тоді :) Цікаво, чи є у 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.