Varsayalım ki viçalışan herhangi bir işlemin (örneğin ) bin veya daha fazla örneğini var . Hepsini tek bir atış / bir satır komutunda / bir komutta nasıl öldürebilirim?
Varsayalım ki viçalışan herhangi bir işlemin (örneğin ) bin veya daha fazla örneğini var . Hepsini tek bir atış / bir satır komutunda / bir komutta nasıl öldürebilirim?
Yanıtlar:
Eskilerin nesi var?
for pid in $(ps -ef | grep "some search" | awk '{print $2}'); do kill -9 $pid; done
Bunu daha verimli hale getirmenin yolları var,
for pid in $(ps -ef | awk '/some search/ {print $2}'); do kill -9 $pid; done
ve diğer varyasyonları, ancak temel düzeyde, her zaman benim için çalıştı.
echo kill -9 $pidZaten her zaman bir ilk olarak çalıştırırım, bu yüzden ne aldığımı biliyorum. AIX'in pkillekmek ve tereyağı UNIX'im olduğundan emin değilim . Ve aşağı oy kullanmak için yeterince kötü mü - garip.
csh
Killall kullanın
killall vi
Bu 'vi' adındaki tüm komutu öldürür.
Aynı zamanda bir sinyal de ekleyebilirsiniz, örneğin SIGKILL
killall -9 vi
killall -9 vi
killall, adından da anlaşılacağı gibi ... init sürecini öldürür.
pkilleğer varsa, ne öneririm ( Linux , FreeBSD , NetBSD , OpenBSD , Solaris ). İşlemleri komut adına göre, tam komut satırına veya diğer ölçütlere göre belirleyebilirsiniz. Örneğin pkill vi, komut adı alt dizgiyi içeren tüm programları öldürür vi. Sadece adı verilen işlemleri öldürmek için vikullanın pkill -x vi. Yalnızca vibiten son bir argümanla çağrılan işlemleri öldürmek için .confkullanın pkill -fx 'vi.*\.conf'.
pkillSinyal gönderecek PID'lerin listesini görmek için, pgrepsinyal adını veya numarasını kabul etmemesi dışında, tamamen aynı sözdizimine sahip olan kullanın . Bu işlemler hakkında daha fazla bilgi görmek için,
ps -p "$(pgrep …)"
Linux altında, ps -p $(pgrep -d, …)bunun yerine ihtiyacınız var (bu bir hata: Linux's psPOSIX uyumlu değil).
Öldürülecek işlemleri tanımlamanın başka bir yaygın yolu, belirli bir dosyanın açık olduğu işlemlerdir (işlemin çalıştırılabilir olabilir). Bunları listeleyebilirsiniz fuser; fuser -kOnlara bir sinyal göndermek için kullanın . Örneğin, fuser -k /usr/bin/findçalışan tüm örnekleri öldürür find.
Eğer çatallaşmaya devam eden kaçak bir işlem varsa, tüm işlem grubunu bir kerede öldürmeniz gerekebilir . Bir süreç grubu, gruptaki tüm süreçlerin ata süreci olan liderinin negatifi ile tanımlanır. Bir işlemin ait olduğu işlem grubunu görmek için, çalıştırın ps -o pgid(artı hangi işlemin görüntüleneceğini seçmek için herhangi bir seçenek). İşlem grubu lideri 1234'ü ve onun tüm çocuklarını öldürmek istediğinizi belirlerseniz, koşun kill -1234ya kill -HUP -1234da başka bir sinyal verin.
Daha iyi bir yol bulamıyorsanız, pstüm işlemleri listelemek ve grepbaşka bir metin filtreleme komutu ile filtrelemek için uygun seçeneklerle kullanın. Komutu benzer bir isimle veya bu ismi içeren bir argümanla yürüten diğer işlemlerin yanlışlıkla eşleşmemesine dikkat edin. Örneğin:
kill $(ps -o pid -o comm | awk '$2 == "vi" {print $1}')
Sizin grepveya awkkomutunuzun kendisinin psçıktıda listelendiğini unutmayın ( psve filtreleme komutu paralel olarak başlatılır, böylece gösterilip gösterilmeyeceği zamanlamaya bağlıdır). Komut argümanları psçıktıya dahil edilmişse bu özellikle önemlidir .
pkillburada çok güzel Deseni iyileştirmek için birçok parametre verebilirsiniz.
pkillLinux, BSD ve Solaris - afaik'te mevcuttur. Bu yüzden daha büyük bir yayılıma sahiptir killall.
Bunu yapmanın en kolay yolu, öncelikle aşağıdaki işlem kimliklerini aldığınızı kontrol etmektir:
pgrep -f [part_of_a_command]
Sonuç beklendiği gibi ise. İle git:
pkill -f [part_of_a_command]
pgrep -f "command name"
İlginç kimse bundan bahsetmedi. pidof , geçen işlemin adı ile eşleşen boşluklarla ayrılmış işlemlerin çıkışlarını verir. Bu nedenle, çıkışını killboru kullanmadan doğrudan kullanabilirsiniz . Arch Linux'ta kullanıyorum
kill -9 $(pidof <proc name>)
Bu çözümün dezavantajı, düzenli ifadelerin kullanımına izin vermemesidir.
Denemenizi öneririm pkill.
Ör: ps -ef | pkill -f command
Öldürülecek tüm işlemlerin listesini ilk önce göstermeye çalışın pgrep:
Ör: ps -ef | pgrep -f command
ps -efiçine borulamanın amacı nedir ? Bu komutlar standart girdiden okunmaz. pkillpgrep
$ ps -eaf | grep "xyz" | grep -v grep | awk 'print $2' | xargs kill
ps -ef | pgrep -f "search" | xargs kill -9
pkillgelenprocpspaketin.