A veces, matar un procedimiento es la única forma de deshacerse de él. A pesar del nombre severo, «matar» un procedimiento simplemente significa «obligarlo a abandonar». A continuación, le indicamos cómo hacerlo desde la línea de comandos de Linux o macOS.
¿Qué es un procedimiento?
La ejecución de programas como su navegador web, los procesos en segundo plano asociados con su entorno de escritorio y los servicios del sistema Linux son todos procesos.
Puede agrupar los procesos en dos grupos:
- Procesos de primer plano son aquellos que han sido iniciados o iniciados por un usuario. Pueden estar en una ventana de terminal o pueden ser una aplicación gráfica.
- Procesos en segundo plano son todos los procesos que se inician automáticamente y no disponen ninguna interacción con los usuarios. No esperan aportes de los usuarios ni les presentan resultados o resultados. Los procesos en segundo plano son cosas como servicios y demonios.
Si los procesos de primer plano son el frente del personal del teatro y los actores, los procesos de fondo son el equipo detrás del escenario «detrás de escena».
Cuando los procesos se comportan mal o funcionan mal, pueden acaparar demasiado tiempo de CPU, consumir su RAM o entrar en un ciclo computacional estrecho y dejar de responder. Las aplicaciones gráficas pueden negarse a responder a los clics del mouse. Es factible que las aplicaciones de terminal nunca lo devuelvan al símbolo del sistema.
La solución humana
«Matar» un procedimiento simplemente significa «forzar el cierre del procedimiento». Esto puede ser necesario si el procedimiento se niega a responder.
Linux proporciona kill
, pkill
, y killall
comandos para permitirle hacer exactamente eso. Estos comandos se pueden usar con cualquier tipo de procedimiento, gráfico o de línea de comando, en primer plano o en segundo plano.
El comando de matar
Utilizar kill
, debe conocer el ID de procedimiento (PID) del procedimiento que desea finalizar. los ps
El comando se puede usar para hallar el PID de un procedimiento.
Tener ps
buscar a través de todos los procesos utilice el -e
(todos los procesos) opción. Canalizando la salida a través less
es aconsejable, habrá bastante. Escribe ps
, un espacio, -e
, un espacio, |
(un carácter de tubería), otro espacio y después escriba less
. Presione Enter para ejecutar el comando.
ps -e | less
Esto le dará una lista de procesos equivalente a la próxima captura de pantalla. Puedes buscar hacia adelante en less
usando el /
y puede buscar hacia atrás con la ?
llave.
Para concentrarse en el procedimiento que le interesa, canalice la salida de ps
a través de grep
y especifique el nombre, o parte del nombre, del procedimiento.
ps -e | grep shutter
Una vez que haya localizado el PID del procedimiento que desea finalizar, páselo al kill
comando como parámetro. Para terminar el shutter
procedimiento identificado por el comando anterior, use este comando:
kill 2099
los kill
El comando es un asesino silencioso; no le da ningún comentario si tuvo éxito.
El comando pkill
los pkill
El comando le posibilita matar un procedimiento (o procesos) por su nombre. No es necesario identificar el procedimiento por PID. Utilizar pkill
proporcionas una definición de búsqueda que pkill
utiliza para comparar con la lista de procesos en ejecución. Los procesos de emparejamiento finalizan. Por eso, debe estar seguro de que ha escrito correctamente ese término de búsqueda.
Como red de seguridad, puede usar pgrep
mando antes de usas el pkill
mando. los pgrep
El comando además acepta una definición de búsqueda. Enumerará el PID de cada procedimiento que coincide con el término de búsqueda. Esto es seguro debido a que pgrep
no emitirá ninguna señal de interrupción a los procesos, y si escribe mal el término de búsqueda, no eliminará otro procedimiento por error. Puede asegurarse de haber pensado correctamente el término de búsqueda antes de pasarlo a pkill
. Ambos pkill
y pgrep
tratar el término de búsqueda de la misma manera. Su trato es tan equivalente que compartir la misma página de manual.
Supongamos que hay un procedimiento con «subq» en su nombre. Usaremos el ps -u dave | grep
comando para echar un vistazo detrás de la cortina. Puede ver que «subq» coincidirá con ese procedimiento y solo con ese procedimiento. Eso fue solo para que puedas ver el nombre completo del procedimiento.
ps -u dave | grep subq
Asumamos nuestro usuario no tiene hecho eso; todo lo que conocen es que el nombre del procedimiento contiene la subcadena «subq». Ellos usan pgrep
para chequear que solo hay una coincidencia con el término de búsqueda. Posteriormente usan ese término de búsqueda con pkill
.
pgrep subq
pkill subq
Puedes utilizar pkill
para matar varios procesos al mismo tiempo. Aquí el usuario corre pgrep
para chequear cuántos procesos ha lanzado Chrome. Ellos usan pkill
para matarlos a todos. Posteriormente verifican con pgrep
que todos han sido eliminados.
pgrep chrome
pkill chrome
pgrep chrome
Si se están ejecutando varios procesos con el mismo nombre, pero no desea eliminarlos a todos, puede utilizar pgrep
con el -f
(línea de comando) opción para identificar qué procedimiento es cuál. Un ejemplo simple serían dos ping
Procesos. Pretendes matar a uno de ellos pero no al otro. Puede utilizar sus líneas de comando para distinguir entre ellos. Tenga en cuenta el uso de comillas para ajustar el parámetro de la línea de comandos.
pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"
El comando Killall
Advertencia: En los sistemas operativos Solaris y OpenIndiana, el killall
el comando será mata todos los procesos que te pertenecen. Si es root o si ha emitido sudo killall
reiniciará su computadora! Durante la investigación para este post, esta conducta se confirmó con la última versión de OpenIndiana Hipster 2018.10.
los killall
mando opera de manera similar al pkill
comando pero con una diferencia específica. En lugar de pasar una definición de búsqueda al comando, debe proporcionar el nombre exacto del procedimiento.
No puede proporcionar una coincidencia parcial con un nombre de procedimiento; debe proporcionar el nombre completo del procedimiento, como se muestra:
killall shutt
killall shutter
los -y
(menor que) le posibilita quitar procesos que se han estado ejecutando durante menos que un período especificado. El período se indica en números seguidos de una de estas unidades:
- s (segundos)
- m (minutos)
- h (horas)
- d (días)
- w (semanas)
- M (meses, nota, «M» mayúscula)
- y (años)
Para matar un procedimiento llamado ana
que se acaba de lanzar y deja cualquier instancia anterior de ana
en ejecución, puede usar los siguientes parámetros con killall
, si hubiera reaccionado en dos minutos:
killall -y 2m ana
los -o
La opción (anterior a) le posibilita quitar procesos que se han estado ejecutando durante más de un período especificado. Este comando matará a todos ssh
conexiones que se han estado ejecutando durante más de un día:
killall -o 1d sshd
No seas demasiado feliz
Estos comandos le permitirán identificar y finalizar procesos erróneos con precisión y seguridad correctamente.
Sea siempre cauteloso. Primero, asegúrese de que el procedimiento que está a punto de finalizar sea verdaderamente el que desea. En segundo lugar, verifique dos veces: tenga cuidado y asegúrese de que el procedimiento objetivo sea el que desea finalizar. Continúe con la finalización del procedimiento una vez que esté satisfecho.