'killall' ve 'pkill' arasındaki fark nedir?

88

Unix sistemlerinde yıllarca sadece kill <some_pid> kullantıktan sonra, daha genç bir Linux çalışanı ortak çalışan iş arkadaşından 1 pkill öğrendim.

Çok geçmeden Linux-yolu, pgrep -ing ve pkill -ing'i günlerce ve geceler boyunca yavaşlama ve yarış koşullarıyla kabul ettim. Bu iyi ve güzeldi.

Ancak şimdi hiçbir şey göremiyorum ama killall . Nasıl yapılır? Sadece killall yazıyor gibi görünüyor ve bunun bir çeşit paralel geliştirme olup olmadığından emin değilim veya killall pkill için bir halefi mi, yoksa başka bir şey mi?

Daha hedefli bir pkill işlevi görüyor gibi görünüyor, ancak eminim ki bir şey eksik.

Ubuntu / Debian-savvy 2 bir kişi killall kullanılmasının ne zaman (veya neden) kullanıldığını açıklayabilir, özellikle pkill ye tercih edilirse ( pkill sık olduğunda) daha kolay görünüyor, çünkü en azından varsayılan olarak isim eşleştirmesiyle daha da eğlendirici olabilirim).

killall 'sinden bahsederken, bazı Unix sistemlerinde (Solaris, AIX,?) tüm kullanıcı süreçlerini öldüreceği komutunu düşünmüyorum. İşte bu sürümün açıklaması, IBM'in AIX sayfası için bir sayfa :

  

Killall komutu hepsini iptal eder   dışında başlattığınız işlemler   Killall işlemini üretenler.   Bu komut bir rahatlık sağlar   tüm süreçleri iptal etme araçları   kontrol ettiğiniz kabuk tarafından yaratıldı.   Kök kullanıcı tarafından başlatıldığında   killall komutu hepsini iptal eder   olanlar hariç iptal edilebilir süreçler   Onu başlatan süreçler. Eğer birkaç   Sinyaller belirtildi, sadece son   biri etkili.

1 'meslektaş', 'ortak çalışan' dan ücretsiz yükseltme, bu yüzden de olabilir.
2 Aslen bunun bir Linux veya Debian olayı olduğunu düşündüm ancak bazı kaynaklar Linux killall 'sinin BSD aromalı Unix'ten türediğini söylüyor.

    
sordu belacqua 22.02.2011 08:31

4 cevap

64

Sanırım killall'u nasıl yapılacağını görüyorsunuz çünkü varsayılan olarak kesin işlem adını gerektiriyor, oysa pkill temel desen eşleştirmesi yapıyor. Böylece, killall, kullanıcıların körü körüne kopyalayıp yapıştırmalarına daha güvenlidir.

Pkill ve killall'ın her ikisi de ayırt edici seçeneklere sahiptir. Killall'ın, işlem yaşına uygun bir bayrağı vardır, pkill, yalnızca belirli bir tty'deki işlemleri öldürmek için bir bayrağı vardır. Etcetera ad nauseum. Ne daha iyi , sadece farklı uzmanlık alanları var.

Adam sayfalarından, killall'ın çeşitli süreç yönetimi araçlarına sahip olan psmisc paketinden geldiğini görüyorum, ancak özellikle ps içerir. Ps, top, kill ve pkill (diğerleri arasında) içeren procps paketidir . Ben procps başlangıçta pkill yoktu, bu yüzden psmisc bir kaşıntı çizdi ve killall ile geldi.

pkill / pgrep man page , Solaris 7’de tanıtıldığını söylüyor. jgbelacqua , Solaris'in killall'i psmisc'in sağladığı fayda değildi, bu yüzden Solaris muhtemelen sadece procps paketine sahipti. Birisi bir desen eşleştirme süreci aracı istedim, bu yüzden pkill ve pgrep. Procps dev tarafından geliştirilen veya daha sonra eklenmiş olsun, bilmiyorum. Her şeye rağmen, onu yaptı ve her yerde * nixlerin bir parçası haline geldi.

Diğer kaynaklar:

verilen cevap djeikyb 22.02.2011 09:06
7

Lütfen "killall" ile dikkatli olun. Bazı sistemlerde (hangisini unuttum), killall tüm süreçlerini öldürür. Argümanları sessizce yok sayar ve sisteminizi tamamen durduracak.

    
verilen cevap phessler 30.07.2012 10:26
3

/ etc / bash_completion öğesini etkinleştirirseniz, killall <part_of_process_name> sonra ve sekme isabetini kullanırsanız - otomatik işlem adını çalışan işlemler listesinden tamamlar

    
verilen cevap jet 22.02.2011 13:28
2

Her iki programdaki seçeneklere bakarsanız, ikisinin de aynı şeyi yaptıklarını görürsünüz, ancak farklı şekillerde.

pkill, bir işlemin çeşitli özniteliklerinde (CMD, PID, PPID, UID ...) eşleşmeyi gerçekleştirir ve verilen sinyali, eşleşen her işleme gönderir. (CMD için, düzenli bir ifade kullanılır, diğerleri için bir dizedir). pkill etkileşimli değil, toplu programlar için daha iyi.

killall, tüm komut dizesinde değil, işlem adı (comm) veya kullanıcı (kullanıcı) üzerinde eşleştirme gerçekleştirir. Argüman basit bir dize olarak kullanılır ve 'comm' değerinin tamamı ile eşleşmelidir (bunu değiştirmek için --regexp seçeneği de vardır). killall, pkill'in sahip olmadığı - etkileşimli ve - daha genç seçeneklere sahiptir.

Ayrıca, SysV günlerinden bir killall5 vardır ve diğer UNIX değişkenlerine (sözde Ubuntu paketi 'sysutils') söz edilmiştir. Bu eski moda tarzında farklı davranır. Bu, genellikle tek kullanıcı moduna geçmek veya değiştirmek için init komut dosyalarına dahili olarak kullanıldı.

    
verilen cevap Arcege 22.02.2011 14:24

Etiketlerdeki diğer soruları oku