Pgrep'i öldürmeyle zincirleyebilir miyim?


31

Bunun |, ilk komutun sonuçlarını diğerine göndermek için kullanıldığını fark ettim . Bir isimle eşleşen tüm işlemleri öldürmek istiyorum.
Bu, pgrep'in normalde yaptığı şeydir:

$ pgrep name
5089
5105

Ve birden fazla argüman şununla çalışıyor gibi görünüyor kill:

sudo kill 5089 5105

Ancak bu yanlış:

pgrep name | kill

Peki düzgün yapmak nasıl?


3
pkill. Ve eğer bu olmasaydı kill $(pgrep ...),.
Mikel

Sadece bu özel komutlar yüzünden değil, aynı zamanda komut zincirini daha iyi anlayabilmem için soruyorum. Ancak soru skorundan da görebildiğim gibi, anlamak istediğim sorular istenmeyen ...
Tomáš Zato - Monica Hazretleri

Soruyu daha genel hale getirmek ve bunun yinelemeli olmadığından emin olmak istiyorsanız, oy kullanabilirim.
Mikel

Maalesef önceki yorumumu yanlışlıkla sildim. Bir tablet üzerindeyim ve bu sitede yan yana gerçekten küçük düğmeler var.
Mikel

Sadece reddettiğimi söyledim çünkü sorunuzun öğrenemediğiniz hiçbir şeyi sormadığı görülüyordu man pgrep. Olumsuz düğme, bir sorunun hiçbir araştırma çabası göstermediğini söyler ve sorunuzda hiçbir şey göremedim. Üzgünüm, sert gözüküyorsa.
Mikel

Yanıtlar:


42

Bunu dene:

pgrep name | xargs kill

Eğer kullanırsanız pgrep name | kill, bir çıktıya pgrep nameait stdin'i beslenmektedir kill. Çünkü killstdin argümanlarını okumuyor, bu yüzden işe yaramayacak.

Kullanarak xargs, killstdin'den argümanlar oluşturacaktır . Örnek:

$ pgrep bash | xargs echo
5514 22298 23079

5
Newline'a göre boşlukla ilgisi yok. Çünkü öldürmek stdin hakkındaki tartışmaları okumaz.
Mikel

@Mikel: Benim hatam düzeltildi.
cuonglm


5

Belirli değil geneline cevap vermek için ...

Borular çıktıyı bir programdan başka bir programa girdi olarak aktarmak içindir.

Bir programın çıktısını , farklı bir programa komut satırı argümanları olarak kullanmaya çalışıyorsunuz gibi görünüyor .

Bunu yapmak için komut değiştirme işlevini kullanın .

Örneğin koşmak istersen

sudo kill 5089 5105

Ve pgrep nameçıktı veren bir emir var.5089 5105

Onları bir araya getirdin

sudo kill $(pgrep name)

Çok teşekkürler. Umarım bu diğer yeni başlayanlara da yardımcı olur.
Tomáš Zato - Monica
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.