¿Cómo puedo eliminar un proceso con una frase en su nombre?

¿Cómo puedo eliminar un proceso con una frase en su nombre?

Necesito matar un proceso que contiene myNameen su descripción. Actualmente estoy haciendo:

ps -ax |grep myName
I see PID
kill -9 PID

¿Cómo puedo hacer lo mismo con un comando sin ingresar el PID?

Respuesta1

Si myNamees el nombre del proceso/ejecutable que desea eliminar, puede usar:

pkill myName

pkillpor defecto envía la SIGTERMseñal (señal 15). Si quieres la SIGKILLseñal o 9, usa:

pkill -9 myName

Si myNameno es el nombre del proceso o, por ejemplo, es un argumento para otro comando (largo), es posible que pkill(o pgrep) no funcione como se esperaba. Entonces necesitas usar la -fopción.

De man kill:

-f, --full
              The pattern is normally only matched against the  process  name.
              When -f is set, the full command line is used.
NOTES
The process name used for matching is limited to the 15 characters present
   in the output of /proc/pid/stat.  Use the -f option to match  against  the
   complete command line, /proc/pid/cmdline.

Entonces:

pkill -f myName

o

kill -9 $(pgrep -f myName)

Respuesta2

Con el nombre de un comando use:

pkill -9 myscript

Si busca una cadena en la línea de comando:

kill -9 $(ps ax | grep myName | fgrep -v grep | awk '{ print $1 }')

Debo advertirte: el comando anterior puede enviar una SIGKILLseñal a más de un proceso.

Respuesta3

Hay dos comandos muy interesantes pgrepque pkillpermiten ingresar un término de búsqueda o parte del nombre del comando, y proporcionarán los PID del proceso o (en el caso de pkill) eliminarán ese proceso.

$ pgrep -f firefox                                                             
23699

Ejecutar el mismo comando con pkilluna -fbandera cerrará todas las ventanas de Firefox.

La -fbandera es necesaria específicamente para buscar en la línea de comandos completa de un proceso.

Respuesta4

Podrías hacer una simple for looprevisión de todos los PID asociados con el nombre del proceso específico, como este:

$ for i in $( ps ax | awk '/[m]yName/ {print $1}' ); do kill ${i}; done

Esto eliminará todos los procesos que contengan la palabra: myName.

información relacionada