¿Puedo encadenar pgrep con kill?


31

He notado que |se usa para enviar resultados del primer comando al otro. Me gustaría matar todos los procesos que coinciden con un nombre.
Esto es lo que normalmente hace pgrep:

$ pgrep name
5089
5105

Y múltiples argumentos parecen funcionar con kill:

sudo kill 5089 5105

Pero esto está mal:

pgrep name | kill

Entonces, ¿cómo hacerlo correctamente?


3
pkill. Y si eso no existía, kill $(pgrep ...).
Mikel

No solo preguntaba por esos comandos específicos, sino también para comprender mejor el encadenamiento de comandos. Pero como puedo ver en el puntaje de la pregunta, las preguntas destinadas a entender no son bienvenidas ...
Tomáš Zato - Restablece a Mónica el

Si desea hacer la pregunta más general y asegurarse de que no sea un duplicado, puedo votarla.
Mikel

Lo sentimos, borré accidentalmente mi comentario anterior. Estoy en una tableta y este sitio tiene botones realmente pequeños uno al lado del otro.
Mikel

Solo decía que voté en contra porque su pregunta no parecía estar haciendo nada de lo que no podría haber aprendido man pgrep. El botón de voto negativo dice que es para cuando una pregunta no muestra ningún esfuerzo de investigación, y no pude ver ninguna en su pregunta. Lo siento si eso pareció duro.
Mikel

Respuestas:


42

Prueba esto:

pgrep name | xargs kill

Si lo usa pgrep name | kill, la salida de pgrep namese alimenta a stdin de kill. Porque killno lee argumentos de stdin, por lo que esto no funcionará.

Utilizando xargs, generará argumentos para killdesde stdin. Ejemplo:

$ pgrep bash | xargs echo
5514 22298 23079

55
Nada que ver con el espacio versus la nueva línea. Simplemente porque kill no lee argumentos en stdin.
Mikel

@ Mikel: Mi error, corregido.
Cuonglm


5

Para responder a lo general en lugar de lo específico ...

Las tuberías son para pasar la salida de un programa como entrada a otro programa.

Parece que está intentando usar la salida de un programa como argumentos de línea de comando para otro programa, que es diferente.

Para hacer eso, use la sustitución de comandos .

Por ejemplo si quieres correr

sudo kill 5089 5105

Y tienes un comando pgrep nameque genera5089 5105

Los pones juntos como

sudo kill $(pgrep name)

Muchas gracias. Espero que esto ayude a otros principiantes también.
Tomáš Zato - Restablece a Monica el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.