Come fornire argomenti per uccidere tramite pipe


85

Devo cercare un determinato processo e ucciderlo. Ho scritto un comando come questo:

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

Dove si trova il nome del processo dmn. Ma non sta funzionando. Come posso trovare i processi per nome e killloro.

Risposte:


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

8
Utilizzare il più recente $()sintassi: kill $(ps -e | grep dmn | awk '{print $1}').
— Stratus3D

7
Per gli altri, ho dovuto modificare questa risposta per farlo funzionare: kill $(ps -efw | grep dmn | grep -v grep | awk '{print $2}')non sono sicuro del perché e non mi interessa abbastanza esaminarlo ulteriormente.
— joshweir

1
@joshweir È perché altrimenti ha killtentato di uccidere anche il processo "grep" che stava cercando di cercare il modello
— misurato il

Non sarebbe richiesto \ndopo ogni awk, come in awk '{print $1"\n"}'?
— Sopalajo de Arrierez

45

Nel caso in cui siano presenti più processi che desideri rimuovere, puoi utilizzare questo:

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

Nota: è necessario rimuovere il processo grep stesso dall'output, ecco perché grep -v grepviene utilizzato.


17
Puoi evitare che grep
— compaia

1
@Oldskool Bel trucco. Usare i metacaratteri per fare in modo che l'espressione regolare grep non corrisponda a se stessa è una bella idea.
— jcollado

@Oldskool, +1, sei un genio!
— jcr

Bel trucco, anche se rende più complicato trasformarlo in uno script di shell
— Metagrapher

17

Potresti usare

pkill dmn 

se il tuo sistema ha il comando pkill .


1
+1 per pkill invece di killall. È disponibile su più piattaforme senza un "significato" diverso ( killall su Solaris è equivalente a killall5 su Linux, ad esempio, ovvero,
— elimina

4

Aggiungendo solo altri, ma mi piace usare la capacità delle funzioni regex di awk:

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

4

Se hai il pidofcomando sul tuo sistema (so che shell come ZSH vengono fornite con questo per impostazione predefinita, a meno che non mi sbagli), potresti fare qualcosa di simile.

kill -9 $(pidof dmn)


2

Potrebbe non essere necessario pipe, se hai il pidofcomando e conosci il nome dell'immagine, l'ho fatto in questo modo:

kill $(pidof synergyc)

$()Lo capisco poiché converte quell'output in una variabile che può essere utilizzata da kill, essenzialmente come farebbe pipe. Più breve e più facile da capire rispetto ad altre opzioni, ma forse anche meno flessibile e più diretto.


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

ciao amici .. possiamo farlo usando il ciclo for.

"Some search" è qui il nome di qualsiasi processo che si desidera cercare, ad esempio "java", quindi supponiamo che il conteggio dei processi java sia 200+, quindi ucciderne uno per uno sarà troppo tipico.

quindi puoi usare il comando sopra.

Grazie.


0

Usa pgrepcon l'opzione -f. kill $(pgrep -f dmn)


4
Se sì pgrep, perché non solo pkill -f dmn?
— muru
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.