Posso concatenare pgrep con kill?


31

Ho notato che |viene utilizzato per inviare i risultati del primo comando all'altro. Vorrei uccidere tutti i processi che corrispondono a un nome.
Questo è ciò che normalmente fa pgrep:

$ pgrep name
5089
5105

E più argomenti sembrano funzionare con kill:

sudo kill 5089 5105

Ma questo è sbagliato:

pgrep name | kill

Quindi come farlo correttamente?


3
pkill. E se questo non esistesse, kill $(pgrep ...).
Mikel,

Non stavo solo chiedendo a causa di quei comandi specifici, ma anche per comprendere meglio il concatenamento dei comandi. Ma come posso vedere dal punteggio delle domande, le domande che vogliono capire sono sgradite ...
Tomáš Zato - Ripristina Monica il

Se vuoi rendere la domanda più generale e assicurarti che non sia un duplicato, posso votarla.
Mikel,

Siamo spiacenti, ho cancellato per errore il mio commento precedente. Sono su un tablet e questo sito ha pulsanti molto piccoli uno accanto all'altro.
Mikel,

Stavo solo dicendo che ho annullato il voto perché la tua domanda non sembra chiedere nulla da cui non avresti potuto imparare man pgrep. Il pulsante di downvote dice che è quando una domanda non mostra alcuno sforzo di ricerca, e non ho potuto vedere nessuno nella tua domanda. Scusa se mi è sembrato duro.
Mikel,

Risposte:


42

Prova questo:

pgrep name | xargs kill

Se lo usi pgrep name | kill, l'output di pgrep nameviene inviato allo stdin di kill. Perché killnon legge argomenti da stdin, quindi questo non funzionerà.

Usando xargs, costruirà argomenti per killfrom stdin. Esempio:

$ pgrep bash | xargs echo
5514 22298 23079

5
Niente a che fare con lo spazio contro la nuova riga. Semplicemente perché kill non legge argomenti su stdin.
Mikel,

@Mikel: errore mio, risolto.
cuonglm,


5

Per rispondere al generale piuttosto che allo specifico ...

I tubi servono per passare l'output da un programma come input a un altro programma.

Sembra che tu stia tentando di utilizzare l'output di un programma come argomento della riga di comando per un altro programma, che è diverso.

Per fare ciò, utilizzare la sostituzione dei comandi .

Ad esempio se si desidera eseguire

sudo kill 5089 5105

E hai un comando pgrep nameche emette5089 5105

Li metti insieme come

sudo kill $(pgrep name)

Molte grazie. Spero che questo possa aiutare anche altri principianti.
Tomáš Zato - Ripristina Monica il
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.