Boru yoluyla öldürmek için argümanlar nasıl verilir


85

Belirli bir süreci aramalı ve bu süreci durdurmalıyım. Bunun gibi bir komut yazdım:

ps -e | grep dmn | awk '{print $1}' | kill

İşlem adının olduğu yer dmn. Ama bu çalışmıyor. Süreçleri ada ve killonlara göre nasıl bulabilirim .

Yanıtlar:


162
kill $(ps -e | grep dmn | awk '{print $1}')

8
Yeni kullanın $()sözdizimi: kill $(ps -e | grep dmn | awk '{print $1}').
Stratus3D

7
Diğerleri için fwiw, işe yaraması için bu cevabı değiştirmek zorunda kaldım: kill $(ps -efw | grep dmn | grep -v grep | awk '{print $2}')neden emin değilim ve yeterince ilgilenmiyorum.
joshweir

1
@joshweir Bunun nedeni kill, kalıbı aramaya çalışan 'grep' sürecini bile öldürmeye çalıştığı için
meain

\nHer awk'den sonra olması gerekmiyor awk '{print $1"\n"}'mu?
Sopalajo de Arrierez

45

Kaldırmak istediğiniz birden fazla işlem olması durumunda, bunu kullanabilirsiniz:

ps -efw | grep dmn | grep -v grep | awk '{print $2}' | xargs kill

Not: Grep sürecinin kendisini çıktıdan kaldırmanız gerekir, bu yüzden grep -v grepkullanılır.


17
İlk karakteri parantez içine koyarak grep'in grep'inizde görünmesini önleyebilirsiniz, örneğin: grep [d] mn
Oldskool

1
@ Oldskool Güzel numara. Grep normal ifadesinin kendisiyle eşleşmemesini sağlamak için meta karakterleri kullanmak güzel bir fikirdir.
jcollado

@ Oldskool, +1, sen bir dahisin!
jcr

Güzel numara, bir kabuk betiğine dönüşmeyi daha karmaşık hale
getirse de


4

Sadece başkalarını ekliyor, ancak awk'ın normal ifade özellikleri kapasitesini kullanmayı seviyorum:

kill $(ps | awk '/dmn/{print $1}')

4

pidofSisteminizde komut varsa (ZSH gibi kabukların bununla birlikte geldiğini biliyorum, yanılmıyorsam), gibi bir şey yapabilirsiniz.

kill -9 $(pidof dmn)


2

Buna ihtiyacınız olmayabilir pipe, eğer pidofkomutunuz varsa ve görüntü adını biliyorsanız, bunu şöyle yaptım:

kill $(pidof synergyc)

$()Bunu, esasen piponun yapacağı gibi, kill'in kullanabileceği bir değişkene dönüştürdüğü için anlıyorum. Diğer seçeneklerden daha kısa ve anlaşılması daha kolay ama aynı zamanda daha az esnek ve daha doğrudan olabilir.


0
for procid in $(ps -aux | grep "some search" | awk '{print $2}'); do kill -9 $procid; done

merhaba arkadaşlar .. bunu for döngüsü kullanarak yapabiliriz.

"Bazı arama" burada, aramak istediğiniz herhangi bir işlem adıdır, örneğin "java", diyelim ki java işleminin sayısı 200+, bu yüzden tek tek öldürmek çok tipik olacaktır.

böylece yukarıdaki komutu kullanabilirsiniz.

Teşekkürler.


0

pgrep-F seçeneği ile kullanın . kill $(pgrep -f dmn)


4
Varsa pgrepneden sadece olmasın pkill -f dmn?
muru
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.