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.