¿Puedo encadenar pgrep con kill?

¿Puedo encadenar pgrep con kill?

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

$ pgrep name
5089
5105

Y varios argumentos parecen funcionar con kill:

sudo kill 5089 5105

Pero esto está mal:

pgrep name | kill

Entonces, ¿cómo hacerlo correctamente?

Respuesta1

Prueba esto:

pgrep name | xargs kill

Si usa pgrep name | kill, la salida de pgrep namese alimenta a la entrada estándar de kill. Debido a que killno lee los argumentos de la entrada estándar, esto no funcionará.

Usando xargs, construirá argumentos para killdesde stdin. Ejemplo:

$ pgrep bash | xargs echo
5514 22298 23079

Respuesta2

Esto debería funcionar:

pkill name

También sugiero leer la página de manual.

Respuesta3

Para responder a lo general más que a lo específico...

Las tuberías sirven para pasar la salida de un programa comoaportea otro programa.

Parece que estás intentando utilizar la salida de un programa comoargumentos de línea de comandoa otro programa, que es diferente.

Para hacer eso, usesustitución de comando.

Por ejemplo si quieres ejecutar

sudo kill 5089 5105

Y tienes un comando pgrep nameque genera5089 5105

Los juntas como

sudo kill $(pgrep name)

información relacionada