2010-02-08 5 views
5

Bazen kabuğumda bunu:Birden çok satırı, bash stdout'ta bir satıra nasıl dönüştürebilirim?

[email protected]:~/shell$ ps aux | grep firefox | awk '{print $2}' 
2681 
2685 
2689 
4645 

$ kill -9 2681 2685 2689 4645 

I boşluklarla ayrılmış bir hattı PID'leri içeren çoklu türlerini dönüştürmek için bir yolu var mı? (Her zaman PID'leri yazmak biraz rahatsız edici ve ben gerçekten öğrenmek istiyorum :))

Çok teşekkürler.

+4

Sanırım xargs aradığınız şey: "ps aux | grep firefox | awk" {print $ 2} '| xargs kill -9 ". Yine de test edin. – Tom

+4

Ayrıca "killall" komutuna bakmak isteyebilirsiniz (her yerde kullanılamaz) – cobbal

+3

Gerekli olmadıkça '-9' kullanmaktan kaçınmak istersiniz. Sadece "PID'yi öldür" ü kullanırsanız, programa temizleme yapma şansı verir. Sadece -9’unu, onsuz cevap vermezse kullanın. –

cevap

11

Bunun kolay yolu kullanıyor Xargs

ps aux | grep firefox | awk '{print $2}' | xargs kill -9 

Bu aynı zamanda tüm pid'ler ile kill komutu açılmasına neden olur. (Tam olarak ne istediğinizi)

+0

Harika, o zaman biliyordum :) – Tom

+0

Bazen bu gibi süreçler çalışıyor olacak: '/ usr/bin/python/usr/share/PackageKit/helpers/yum/yumBackend.py get-files ... firefox; 5.0-2.fc15; x86_64; güncelleştirmeler & ... 've -9 sorunlara neden olur (bu örnekte, yumru veritabanları bozuk olabilir/dosyaları ve kesintili bir güncelleme) – yingted

2
pids="" 
for pid in $(ps aux | grep firefox | awk '{print $2}') 
do 
pids=" $pid" 
done 
kill -9 $pids 
+3

Bunu mu demek istediniz: pids = "$ pids $ pid" '? Bu nasıl çalıştığını görmüyorum ... –

+1

Teşekkürler bir çekicilik gibi çalışır :) – Zenet

2

pkill kullanın. Ayrıca bir pgrep var.

İstediğiniz şeyi yapacak ve ne kadar basit alabilirsiniz?

pkill firefox 

-9 seçeneğini pkill ile kullanmak şu anda yaptığınız şey olabilir; Ancak SIGKILL kaçının:

hafifçe bu sinyali kullanmayın. Sürecin temizlenme şansı olmayacak. Artık yetim çocuk süreçleri, geçici dosyalar, tahsis edilmiş kilitler, aktif paylaşımlı bellek bölümleri, meşgul soketler ve herhangi bir başka kaynak durumu tutarsızlığı bırakabilir. Bu, sistemin sonraki işleminde hataların ayıklanmasına ve şaşırtıcı olmasına yol açabilir. [ wlug.org]

Ve: Bu arada

, bu rutin SIGKILL kullanmamalısınız bir nedeni budur. SIGKILL sadece bir süreç asılmış ve başka bir şekilde öldürülemezse kullanılmalıdır. Python betiğinde bir SIGTERM veya SIGINT kullanıyorsanız, mplayer'ın terminali USABLE durumunda bırakacağını göreceksiniz. Eğer rutin olarak SIGKILL programlarını kullanırsanız, hiçbir şeyi temizleme şansınız yok ve bazı durumlarda tüm sisteminizi olumsuz yönde etkileyebilir. SIGTERM, kill shell komutu tarafından gönderilen varsayılan sinyaldir. SIGINT, bir terminal kesintisinden (kontrol-C) gönderilen sinyaldir. [debian.org]

+1

teşekkürler Roger, ben adam sayfalarını çok yararlı buluyorum :) – Zenet

6
killall -9 firefox 
+0

çok çalışıyor :) teşekkürler! – Zenet

2

Eğer sadece ben pkill kullanmayla ilgili diğer tüm yanıtları katılıyorum

ps -eo pid,args | awk 'BEGIN{s="kill -9 "}$2~/bash/{s=s" "$1} END{system(s)}' 
2

awk ile bunu ama ... ve yerine xargs kullanmanın edebilirsiniz .. . tr için her boru it: Ayrıca

kill $(ps aux | grep [f]irefox | awk '{print $2}' | tr '\n' ' ') 

, [f] kullanmayı düşünün böylece grep sürecinin kendisiyle eşleşmiyorsunuz.