Bir adla eşleşen tüm süreçler nasıl öldürülür?


260

Amarok kelimesini içeren her işlemi öldürmek istediğimi söyle. Yürütmek istediğim komutları yazdırabilirim. Ama kabuğun onları çalıştırmasını nasıl sağlarım. yani.

ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'
Output:
kill -9 3052
kill -9 3071
kill -9 3076
kill -9 3077
kill -9 3079
kill -9 3080
kill -9 3082
kill -9 3083
kill -9 3084
kill -9 3085
kill -9 3086
kill -9 3087
kill -9 3088
kill -9 3089
kill -9 4031

Ekle | sh -xKomut satırından kalanı sonra?
Jonathan Leffler

7
asla kill -9bir süreçte kullanmayın [süreç yönetimi] [1] [1]: mywiki.wooledge.org/… ...
Fredrik Pihl

Yukarıdaki yorumu sadece öldürmek -9 kötü bir fikir değil, aynı zamanda isimleri yoluyla birden fazla işlemi öldürmeye çalıştığınız gerçeğini eklemek. Bir sürecin adı hakkında benzersiz bir şey yoktur ve bu nedenle kimlik tespiti için kötü bir adaydır.
Raul-

amarokxSüreci de öldürecek mi? Ben vi'yı pkill supervisorctl, kelimede 'vi' içeren öldürür .
Aralık'ta Gank

4
Kullanmama hakkındaki makale -9oldukça yararsızdır - insanların neden kullanmaması gerektiğine dair daha iyi bir bilgi var mı? Sadece "kullanma, onu kullanan insanları kovma" der; ama şimdiye kadar başka her yerde gördüğüm şey bu kill -9 {pid}nasıl bir şey öldürmek için ...
dwanderson

Yanıtlar:


438

itibaren man 1 pkill

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

Yani, örneğin, bu satırları şu şekilde görürsek ps aux:

apache   24268  0.0  2.6 388152 27116 ?        S    Jun13   0:10 /usr/sbin/httpd
apache   24272  0.0  2.6 387944 27104 ?        S    Jun13   0:09 /usr/sbin/httpd
apache   24319  0.0  2.6 387884 27316 ?        S    Jun15   0:04 /usr/sbin/httpd

Hepsini pkill -fseçeneğini kullanarak öldürebiliriz :

pkill -f httpd

1
Bunun bu sorunun konusuna değinmediğinin farkındayım, ancak yapmaya çalıştığınız şeyi yapmanın alternatif ve daha kısa bir yöntemini gösteriyor.
Tim Bielawa

19
Ekstra güç -9için sonuna ekleyin !
mlissner

httpdxSüreci de öldürecek mi? Ben vi'yı pkill supervisorctl, kelimede 'vi' içeren öldürür .
Aralık'ta Gank

Süper - Ubuntu 18.04.1 LTS
Salathiel Genèse

Küçük harf duyarsız maçlar kullanmak için -i, gibi pkill -fi wine. Önce ve sonra doğrulamak için tuşunu kullanın ps uax | grep -i wine.
vulcan raven

207
ps aux | grep -ie amarok | awk '{print $2}' | xargs kill -9 

xargs (1): xargs - bağımsız değişken listesi oluşturun ve yardımcı programı çalıştırın. Faydalı Eğer böyle bir şey için argümanlar içinde borunun istediğinizde killya lsya böyle devam eder.


3
Xargs'tan bahsetmek için puan - tüm bu pgrep / pkill şeyleri çok iyi, ancak xargs genel amaçlı bir araçtır ve her linux / unix'de standarttır.
chrisdowney

4
"öldür: Böyle bir süreç yok"
Cerin

3
Cerin, çünkü zaten bitmiş olan grep sürecini de öldürmeye çalışıyor. İyi olmalı.
Costi Muraru

6
Grep sürecini yakalamaktan kaçınmak için küçük bir hile var: ps aux | grep -ie [a] marok | awk '{2 $ yazdır}' | xargs kill -9
RCross

8
Ayrıca ps aux | grep -ie amarok | grep -v grep | awk '{print $2}' | xargs kill -9grep -vgrep --invert
grep'i

47

kullanım pgrep

kill -9 $(pgrep amarok)

26
bile eleganter:pkill -9 amarok
glenn jackman

1
pkill, "<word> kelimesini içeren her işlem" bölümünü daha fazla boru veya işlem oluşturmadan yerel olarak işler. Pgrep ihtiyacını ortadan kaldırmak için tam işlem adı arama için -f seçeneğine bakın.
Tim Bielawa

2
Pkill'in varsayılan olarak işlem adlarında kısmi eşleşmeye izin verdiğine dikkat edin. Bu komut eğer varsa amarok2'yi de öldürür. Tam adları belirtmek istiyorsanız -x veya -f kullanın.
kullanıcı79878

Pgrep ile eşleşmezse başarısız olur
alfredocambera

tam ad eşleşmesi kullanımı içinkill -9 $(pgrep -f amarok)
cinatic

27

Bunu yapmanın güvenli yolu:

pkill -f amarok

1
Buna eklemek için -lbayrağı ekledim . Aslında böyle bir şey yürütebilmek pkilliçin takma ad pkill -flverdim pkill jbossve yeni öldürdüğü süreci tükürecek.
nland

amarokxSüreci de öldürecek mi? Ben vi'yı pkill supervisorctl, kelimede 'vi' içeren öldürür .
Gank

Bu tepenin (Tim'in) cevabından farkı nedir? Sadece örnek adıyla eşleşir, yoksa aynı görünüyor mu? @ndland pkill: invalid option -- 'l'- pkill kimden procps-ng 3.3.12
Xen2050

18

Bence bu komut killall tam da ihtiyacınız olan şey. Komut "işlemleri isme göre öldür" olarak tanımlanır. Kullanımı kolaydır.

killall chrome

Bu komut Chrome'un tüm işlemlerini öldürecek. İşte killall komutu hakkında bir bağlantı

http://linux.about.com/library/cmd/blcmdl1_killall.htm

Umarım bu komut size yardımcı olabilir.


Bu yalnızca tam komut satırıyla değil, adıyla eşleşir. Kesinlikle aramanın ps auxçıktısı ile aynı değil
Xen2050 25:08

12

pkill -x, işlem adıyla tam olarak eşleşir.

pkill -x amarok

pkill -f benzerdir ancak düzenli bir ifade modeline izin verir.

Başka parametre içermeyen pkill'in (örn. -X, -f) işlem adlarında kısmi eşleşmelere izin vereceğini unutmayın. Yani "pkill amarok" amarok, amarokBanana, bananaamarok vb.

Keşke -x varsayılan davranış olsaydı!


amarokxSüreci de öldürecek mi? Ben vi'yı pkill supervisorctl, kelimede 'vi' içeren öldürür .
Gank

@Gank, evet, içinde "amarok" bulunan herhangi bir işlem adı.
user79878

Amarokx yerine amarok nasıl öldürülür?
Gank

1
@ Gank, -x bayrağı. pkill -x amarok
user79878

4

Bir komutun çıktısını yürütmek istiyorsanız, içine koyabilirsiniz $(...), ancak özel göreviniz için killallve pkillkomutlarına bakın.


3

Çıktınızı bir alt işlem olarak da değerlendirebilir, her şeyi geri keneler ile çevreleyerek veya $ () içine koyarak:

`ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'`

 $(ps aux | grep -ie amarok | awk '{print "kill -9 " $2}')     

3

kill -s 9'ups -ef |grep "Nov 11" |grep -v grep | awk '{print $2}' deneyin 11 Kasım'daki işlemleri öldürmek veya -s 9'u ps -ef |grep amarok|grep -v grep | awk '{print $2}' öldürmek amarok kelimesini içeren işlemleri öldürmek


0

Komutları yürütülebilir dosyaya ekleyebilir, + x iznini ayarlayabilir ve sonra çalıştırabilirsiniz?

ps aux | grep -ie amarok | awk '{print "kill -9 " $2}' > pk;chmod +x pk;./pk;rm pk

-1

Cygwin veya eksik bir minimum kabuk kullanıyorsanız killall kullanıyorsanız bu komut dosyasını kullanabilirsiniz:

killall.sh - İşlem adına göre öldür.

#/bin/bash
ps -W | grep "$1" | awk '{print $1}' | xargs kill --

Kullanımı:

$ killall <process name>

Ben alıyorumkill: invalid argument f
rosstex

1
-F ile -
Tony O'Hagan'ı
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.