Linux: Zabij proces na podstawie argumentów

54

Jak mogę zabić proces na podstawie argumentów wiersza poleceń? killall, pgrepi pkillwydaje się, że działa tylko w oparciu o nazwę procesu.

Potrzebuję tego, aby móc rozróżnić kilka aplikacji działających na maszynach wirtualnych Java, gdzie javajest nazwa procesu dla wszystkich z nich, a rzeczywistą nazwę aplikacji można znaleźć, patrząc na argumenty wiersza poleceń.

Można to zrobić ręcznie za pomocą, ps aux | grep myapp.jara następnie ręcznie zabijając pid z danych wyjściowych, ale chciałbym, aby polecenie automatycznie zrobiło coś równoważnego.

Mark Howard
źródło

Odpowiedzi:

69

pgrep/ pkillweź -fflagę. Ze manstrony:

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

Na przykład:

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

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

$ pgrep sleep
8008
Michał Mrożek
źródło
+1, ale mój bash 4.1.5 nie działa na dwukropek po ampersand (jak w pierwszym wierszu przykładu) ... bash: syntax error near unexpected token ';'... Działa w instrukcji case , gdy po ampersand następuje ;;... może używasz innej powłoki (?)
Peter.O
@ jw013 Właściwie używałem zsh, który obsługuje używaną składnię. Pozostawienie go działa w obu przypadkach, więc usunąłem go
Michael Mrozek
@MichaelMrozek ok nvm więc :) Zastanawiam się, czy unix.SE ma większy odsetek zshużytkowników niż gdzie indziej - wydaje mi się, że zshtutaj znajduję tylko użytkowników.
jw013,
4

Możesz użyć, htopaby wyświetlić wszystkie aktualnie uruchomione procesy wraz z ich argumentami wiersza poleceń i zabić wybrany proces.

Jan Henke
źródło
4

Zastąp argumentponiżej wyrażeniem regularnym, które musi wypełniać całą linię poleceń procesu:

kill `ps -eo pid,args --cols=10000 | awk '/argument/ && $1 != PROCINFO["pid"] { print $1 }'`
Maxim Egorushkin
źródło
0

Jeśli nie masz pkill lub cokolwiek innego, po prostu użyj proc / [1-9] * / cmdline

grep -a myapp.jar /proc/[1-9]*/cmdline|tr '\0' ' '|grep -v grep|awk -F/ '{print $3}'
ikrabbe
źródło