İçinde bash
şunları yapabilmelisiniz:
kill $(ps aux | grep '[p]ython csp_build.py' | awk '{print $2}')
Çalışmaları ile ilgili detaylar aşağıdaki gibidir:
ps
Size tüm işlemlerin listesini verir.
grep
Arama dizisi dayalı, filtreler [p]
bir hile olmadığı ve gerçek toplayıp durdurmak için grep
sürecin kendisini.
awk
Sadece sana PID olan her satırın, ikinci alanını verir.
$(x)
Yapı araçları çalıştırmak için x
daha sonra çıkışını alıp komut satırında koydu. ps
Yukarıdaki yapı içindeki bu boru hattının çıktısı, işlem kimlikleri listesidir, böylece bir komutla sonuçlanırsınız kill 1234 1122 7654
.
İşte bunu gösteren bir konuşma metni:
pax> sleep 3600 &
[1] 2225
pax> sleep 3600 &
[2] 2226
pax> sleep 3600 &
[3] 2227
pax> sleep 3600 &
[4] 2228
pax> sleep 3600 &
[5] 2229
pax> kill $(ps aux | grep '[s]leep' | awk '{print $2}')
[5]+ Terminated sleep 3600
[1] Terminated sleep 3600
[2] Terminated sleep 3600
[3]- Terminated sleep 3600
[4]+ Terminated sleep 3600
ve tüm uyuyanları sonlandırdığını görebilirsiniz.
Açıklanması grep '[p]ython csp_build.py'
biraz daha ayrıntılı olarak biraz:
Bunu sleep 3600 &
takip ps -ef | grep sleep
ettiğinizde , içinde iki işlem yapma eğilimindesiniz ve ve (çünkü her ikisinde de var , bu roket bilimi değil).sleep
sleep 3600
grep sleep
sleep
Bununla birlikte, ps -ef | grep '[s]leep'
içinde bir işlem oluşturmaz sleep
, bunun yerine yaratır grep '[s]leep'
ve işte zor bit: grep
bulamaz, çünkü karakter sınıfından herhangi bir karakter [s]
( s
ardından) normal ifadeyi arar leep
.
Başka bir deyişle, aradığı sleep
ancak grep süreçtir grep '[s]leep'
sahip olmadığı sleep
o.
Bunu gösterdiğimde (burada SO'daki biri tarafından), hemen kullanmaya başladım çünkü
- eklemekten daha az bir süreç
| grep -v grep
; ve
- zarif ve sinsi, nadir bir kombinasyon :-)