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 $pid
Zaten her zaman bir ilk olarak çalıştırırım, bu yüzden ne aldığımı biliyorum. AIX'in pkill
ekmek 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.
pkill
eğ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 vi
kullanın pkill -x vi
. Yalnızca vi
biten son bir argümanla çağrılan işlemleri öldürmek için .conf
kullanın pkill -fx 'vi.*\.conf'
.
pkill
Sinyal gönderecek PID'lerin listesini görmek için, pgrep
sinyal 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 ps
POSIX 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 -k
Onlara 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 -1234
ya kill -HUP -1234
da başka bir sinyal verin.
Daha iyi bir yol bulamıyorsanız, ps
tüm işlemleri listelemek ve grep
baş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 grep
veya awk
komutunuzun kendisinin ps
çıktıda listelendiğini unutmayın ( ps
ve 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 .
pkill
burada çok güzel Deseni iyileştirmek için birçok parametre verebilirsiniz.
pkill
Linux, 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ı kill
boru 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 -ef
içine borulamanın amacı nedir ? Bu komutlar standart girdiden okunmaz. pkill
pgrep
$ ps -eaf | grep "xyz" | grep -v grep | awk 'print $2' | xargs kill
ps -ef | pgrep -f "search" | xargs kill -9
pkill
gelenprocps
paketin.