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.