Tüm isimleri verilen isim ile nasıl öldürürüm?


16

Ben komut çalıştırın ps -A | grep <application_name>ve böyle işlem listesi alma:

19440 ?        00:00:11 <application_name>
21630 ?        00:00:00 <application_name>
22694 ?        00:00:00 <application_name>

Ben listeden tüm süreci öldürmek istiyorum: 19440, 21630, 22694.

Denedim ps -A | grep <application_name> | xargs kill -9 $1ama hatalarla çalışıyor.

kill: illegal pid ?
kill: illegal pid 00:00:00
kill: illegal pid <application_name>

Bunu nasıl incelikle yapabilirim?

Yanıtlar:


25
pkill -f <application_na>

<application_na>İsimlerinde deseni içeren tüm işlemleri öldürür .

adam pkill


9

Sorun şu şekilde ps -A | grep <application_name> | xargs -n1çıktı döndürüyor

19440
?
00:00:11
<application_name>
21630
?
00:00:00
<application_name>
22694
?
00:00:00
<application_name>

awkÖnce bir psçıkış sütunu almak için kullanabilirsiniz .

ps -A | grep <application_name> | awk '{print $1}' | xargs -n1

PID'lerin listesini döndürür

19440
21630
22694

Ayrıca kill -9 $1tüm PID'leri öldüren bir komutunuz var

ps -A | grep <application_name> | awk '{print $1}' | xargs kill -9 $1

Bu mükemmel bash betiği üzerinde test ediyor, işlemciyi hemen hatasız öldürüyor + süreç başlamasa bile istediğim hiçbir hata göstermiyor, burada ffmpeg işlemci katili örneği nano /usr/bin/ffmpegk . . . . ps -A | grep ffmpeg | awk '{print $1}' | xargs kill -9 $1 . . . . chmod a+rx /usr/bin/ffmpegk
Salem F

kill -9Hiçbir işlem eşleşmiyorsa çıktısını aldığım bir sorunum var
Daniel F

1
Bunun yerine , isimle eşleşmek grepiçin kullanmalısınız awk:ps -A | awk "\$4 == \"$1\" { print \$1; }"
Toby Speight

0

killall bunu yapabilir.

$ killall application_name

Kill hepsi bir uygulama adında düzenli ifadeye izin veriyor mu?
asukasz D. Tulikowski

killall --regexp "appl.*me"Rağmen farklı killall uygulamalar olabilir. Bkz man killall.
rudimeier

killall bazen yeterli değil, süreci öldürmek için üç kez göndermem gerekiyor ve hatta öldüremiyorum, benim için tek hızlı çalışma çözümü kill -9 pid@ ŁukaszD.Tulikowski, özellikle bas komut dosyaları için en iyi çalışma çözümüdür.
Salem F

-1
ps -eaf | grep -i applicationname| grep -iv 'grep'| awk '{print "kill -9" " "  $2}'|sh

Bu soruya henüz oy vermedim, ancak bunun neden diğer çözümlerden farklı veya daha iyi olduğunu - buna çok benzeyen - veya OP'nin neden varyasyonlarında neden sorun yaşadığını açıklamamışsınız.
Jeff Schaller

-2

Benim yaklaşımım @ Łukasz D. Tulikowski'a benzer . Kullanmak yerine grep <application_name>; grep "[a]pplication_name"Kendi işlem komut satırı ile eşleşmeyen kullandım .

Köşeli ayraç ifadesi, grepkarakter sınıfı kalıp eşleşmesinin bir parçasıdır . (Referans) .


awkÖnce bir psçıkış sütunu almak için kullanabilirsiniz .

ps -A | grep "[a]pplication_na" | awk '{print $2}' | xargs -n1

PID'lerin listesini döndürür

7644
407
406

Daha sonra kill -9 $1tüm PID'leri öldüren bir komutunuz var

ps aux | grep "[a]pplication_na" | awk '{print $2}' | xargs kill -9 $1

Neden testi daha doğru yapmak için grepkullanmak yerine awk? grepÖrneğin, hedefi alt dize olarak içeren adlarla eşleşir.
Toby Speight
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.