Uruchamiam polecenie ps -A | grep <application_name>
i uzyskuję listę takich procesów:
19440 ? 00:00:11 <application_name>
21630 ? 00:00:00 <application_name>
22694 ? 00:00:00 <application_name>
Chcę zabić cały proces z listy: 19440
, 21630
, 22694
.
Próbowałem, ps -A | grep <application_name> | xargs kill -9 $1
ale działa z błędami.
kill: illegal pid ?
kill: illegal pid 00:00:00
kill: illegal pid <application_name>
Jak mogę to zrobić z wdziękiem?
nano /usr/bin/ffmpegk
. . . .ps -A | grep ffmpeg | awk '{print $1}' | xargs kill -9 $1
. . . .chmod a+rx /usr/bin/ffmpegk
kill -9
jeśli żaden proces nie pasujegrep
powinieneś użyć,awk
aby dopasować do nazwy:ps -A | awk "\$4 == \"$1\" { print \$1; }"
killall
mogę to zrobić.źródło
killall --regexp "appl.*me"
Chociaż mogą istnieć różne implementacje killall. Zobaczyćman killall
.kill -9 pid
myślę, że @ ŁukaszD.Tulikowski jest najlepszym działającym rozwiązaniem specjalnie dla skryptów bash.źródło
Moje podejście jest podobne do @
Łukasz D. Tulikowski
. Zamiast używaćgrep <application_name>
; Użyłemgrep "[a]pplication_name"
, który nie pasuje do własnej linii poleceń procesu.Wyrażenie w nawiasach kwadratowych jest częścią
grep
dopasowania wzorca klasy znaków. (Odniesienie) .Możesz użyć
awk
do uzyskania najpierw kolumnyps
wyników.Zwróci listę PID
Później dodając
kill -9 $1
masz polecenie, które zabija wszystkie PIDźródło
grep
zamiast używaćawk
do poprawnego wykonania testu?grep
dopasuje na przykład nazwy zawierające cel jako podłańcuch.