
Necesito matar un proceso que contiene myName
en 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 myName
es el nombre del proceso/ejecutable que desea eliminar, puede usar:
pkill myName
pkill
por defecto envía la SIGTERM
señal (señal 15). Si quieres la SIGKILL
señal o 9, usa:
pkill -9 myName
Si myName
no 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 -f
opció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 SIGKILL
señal a más de un proceso.
Respuesta3
Hay dos comandos muy interesantes pgrep
que pkill
permiten 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 pkill
una -f
bandera cerrará todas las ventanas de Firefox.
La -f
bandera es necesaria específicamente para buscar en la línea de comandos completa de un proceso.
Respuesta4
Podrías hacer una simple for loop
revisió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
.