Shell komut dosyası -9 isme göre öldürmek


28

Bu süreci otomatikleştirmenin bir yolu (belki bir komut dosyası) var mı:

petr@sova:~$ ps -ef | grep middleman
petr     18445  2312  1 12:06 pts/2    00:00:01 /home/petr/.rvm/gems/ruby-1.9.3-p362/bin/middleman                                                                  
petr     18581 13621  0 12:08 pts/0    00:00:00 grep --color=auto middleman
petr@sova:~$ kill -9 18445

Ne yazık ki, seçeneği ile pkillgitmek zorunda olduğu gibi çok zayıf .-9kill


2
Sen kullanabilirsiniz -9ile pkillçok ...
Dur zarar Monica

6
Bence, kullanımı daha şık ve uygun olduğunu -KILLdaha -9. Hangi sayı hangi sinyalin uygulamaya bağlı olduğuna karşılık gelir. SIGKILLolur 9ama şart değil her yerde, Linux i386 ve Linux amd64 üzerinde. ( Burada daha fazla bilgi. )
Eliah Kagan

5
@EliahKagan: Ben de kullanmayı sevdiğim halde -KILL(kodu daha okunaklı kıldığından), POSIX tarafından belirtildiği gibi , günümüzde oldukça taşınabilir SIGKILL = 9olduğu belirtilmelidir-9 (ve çekirdeğe veya mimariye bağlı değildir).
Andrea Corbellini

Yanıtlar:


36

Bu görevi sizin için yapmak için kabuğunuzu kullanabilirsiniz:

kill -9 $(pidof middleman)

Kabuk önce komutu yürütür pidof middleman. Pidof (8) çıktısı işlem kimliğidir . Bu nedenle kabuk, pidof-komutunu işlem kimliğiyle değiştirir ve yürütür kill -9 18845(veya doğru işlem kimliği ne olursa olsun).


Bu ve arasındaki fark nedir kill -9 $(pgrep middleman)?
Aaron Franke

54

Qbi'den daha basit bir çözüm var: killallhaydi süreçleri ismiyle öldürelim ve sinyalleri belirleyebilirsiniz.

killall -9 middleman

Daha man killallfazla bilgi ve ekstra seçenekler için bakın (epeyce var).

Adından da anlaşılacağı gibi, bu, belirtilen tüm işlemlere sinyal gönderir middleman. Ama bu diğer yollardan (gibi pkill) farklı değil . Dahası, pkill -9 middlemanAdını maç ama yapacak eşit değil süreçlerini hedef alacak middlemangibi middleman2yanı.


2
killallkazanmak için!
Andrea Corbellini

4
tüm aracı öldürmek? Ah canım ...
Tobias Kienzler 12:13,

16

Diğer cevaplar tamamen doğru, fakat üçüncü bir seçenek de ekleyebilirim, böylece hepsi burada belgelenir. Ayrıca kullanabilirsiniz:

pkill -9 middleman

Daha man pkillfazla bilgi ve ilave seçenekler için bakınız .

Bu yöntemlerden hangisini kullandığınız önemli değil. Hepsi çalışacak. Ancak davranışı bir şekilde değiştirmek istiyorsanız, seçeneklerin yararlı olup olmadığını bilmek, karşılık gelen kılavuz sayfalarında başka hangi eşleşme seçeneklerinin kullanılabilir olduğu gösterilir.


Garip, burada çalışmıyor. Ne de yaparmiddleman*
mreq

1
Ah. Daha yakından bakıldığında, gerçekten denilen bir işlemden ziyade yakut bir tercümanı öldürmek istemeniz muhtemel görünüyor middleman. Bu tam olarak nasıl nerede farklılıklar olduğunu pkill, killall, pidofve grepmaç süreçler gerçekten önemli başlar!
Robie Basak

12
pkill -9 -f middleman

-fSeçenek yalnızca işlem adı yerine, tam komut satırını maç yapar.

Bunun -9son çare sinyali olması gerektiğini, rutin olarak kullanılması gereken bir şey olmadığını unutmayın.


1
Teşekkürler! Eşleştirme yeteneğini gerçekten çok seviyorumcomplete command line
cwd

Komut satırının tamamı gerçekten harika!
okwap

10

Sadece eğlence için, daha eski bir okul yolu daha manuel eklemek istiyorum

kill -9 `ps aux | grep middleman | awk '{print $2}'`

1
Bunu birkaç yıl önce yaptım ve yönetici bana "tamam, büyükbaba" yazan bir görünüm verdi. Grep komutunu da öldürmediğinden emin olmak için awk'tan önce grep -v grep ekleyebilir.
Iain Sahibi

@ gerhard, düzenleme için teşekkürler, iPad'imde geri dönüş numaralarını bulamadım. grep -v iyi bir fikir ...
kızaklı

Gerçek eski okul yolu ... grep [m]iddleman ..., grepsüreci kazara öldürmekten kaçınmak için yazmak olacaktır . Bu şekilde grep, komik alıntılama nedeniyle kendi kendine eşleşemez.
Mikko Rantalainen

1
killall -9 -ir regex_pattern

etkileşimli (güvenli) olan ve kısmi komut adıyla eşleşen.

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.