Jak podać argumenty do zabicia przez potok


85

Muszę znaleźć pewien proces i go zabić. Napisałem takie polecenie:

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

Gdzie jest nazwa procesu dmn. Ale to nie działa. Jak mogę znaleźć procesy według nazwy i killich.

Odpowiedzi:


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

8
Użyj nowszej $()składni: kill $(ps -e | grep dmn | awk '{print $1}').
Stratus3D

7
fwiw dla innych, musiałem zmodyfikować tę odpowiedź, aby działała: kill $(ps -efw | grep dmn | grep -v grep | awk '{print $2}')nie wiem dlaczego i nie przejmuję się zbytnio zajrzyj do niej.
joshweir

1
@joshweir To dlatego, że w inny sposób killpróbował zabić nawet proces
``

Czy nie byłoby to wymagane \npo każdym awk, jak w awk '{print $1"\n"}'?
Sopalajo de Arrierez

43

Jeśli istnieje wiele procesów, które chcesz usunąć, możesz użyć tego:

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

Uwaga: Musisz usunąć sam proces grep z wyjścia, dlatego grep -v grepjest używany.


17
Możesz uniknąć pojawienia się
grepa

1
@Oldskool Niezła sztuczka. Używanie metacharaktere, aby wyrażenie regularne grep nie pasowało do siebie, jest dobrym pomysłem.
jcollado

@Oldskool, +1, jesteś geniuszem!
jcr

Niezła sztuczka, chociaż sprawia, że ​​przekształcenie go w skrypt powłoki jest bardziej skomplikowane
Metagrapher

17

Możesz użyć

pkill dmn 

jeśli twój system ma polecenie pkill .


1
+1 za pkill zamiast killall. Jest dostępny na wielu platformach bez innego "znaczenia" ( killall w Solaris jest na przykład odpowiednikiem killall5 w Linuksie - to znaczy zabij WSZYSTKIE procesy)
plundra

4

Dodam tylko inne, ale lubię używać możliwości funkcji regex awk:

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

4

Jeśli masz pidofpolecenie w swoim systemie (wiem, że powłoki takie jak ZSH są domyślnie dostarczane z tym, chyba że się mylę), możesz zrobić coś takiego.

kill -9 $(pidof dmn)


2

Możesz tego nie potrzebować pipe, jeśli masz pidofpolecenie i znasz nazwę obrazu, zrobiłem to tak:

kill $(pidof synergyc)

$()Rozumiem to, ponieważ konwertuje to wyjście na zmienną, której może użyć kill, zasadniczo tak, jak zrobiłby to pipe. Krótsze i łatwiejsze do zrozumienia niż niektóre inne opcje, ale może też mniej elastyczne i bardziej bezpośrednie.


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

cześć przyjaciele ... możemy to zrobić za pomocą pętli for.

„Some search” to tutaj nazwa procesu, który chcesz przeszukać, na przykład „java”, więc powiedzmy, że liczba procesów w Javie to 200+, więc zabijanie jednego po drugim będzie zbyt typowe.

więc możesz użyć powyższego polecenia.

Dzięki.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.