Hay ocasiones en que un administrador del sistema puede desear interrumpir la normal ejecución de un proceso, ya sea debido a que olvidó incluir un parámetro en el comando que lo inició, porque no se está comportando de la manera esperada, o bien porque está impactando negativamente en el funcionamiento del sistema. En Linux generalmente hacemos referencia a esta acción como «matar procesos», y en este post explicaremos las maneras más usuales de llevarla a cabo. Todo esto a fin de saber cómo liberar los recursos del sistema que dichos procesos utilizan.
Antes de matar procesos…
Para evitar errores, antes de matar procesos es preferible identificar aquellos que se verían afectados por nuestra medida. Por ejemplo, antes de matar el proceso con PID 3392 es una buena idea identificarlo primero mediante ps y la opción --pid
. La razón de esto es asegurarnos de que apuntamos correctamente el PID a fin de no interrumpir el proceso equivocado:
[pastacode lang=»bash» manual=»ps%20–pid%203392″ message=»» highlight=»» provider=»manual»/]
Si la descripción del proceso corresponde con lo esperado, podemos proceder a matarlo con el comando kill seguido del PID del proceso en cuestión. Podemos ver el resultado en la Fig. 1:
Matando dos (o más pájaros) de un tiro
La alternativa presentada en la sección anterior es eficaz si deseamos matar un solo proceso. Si quisiéramos interrumpir todos aquellos que tienen un PPID en común (o todos los que pertenezcan a un usuario o grupo en particular) ir uno por uno sería tedioso. Por tal motivo, disponemos de los comandos pgrep y pkill para identificar y matar varios procesos de una sola vez.
A manera de ilustración, identifiquemos aquellos procesos que comparten el padre con PID 1576:
[pastacode lang=»bash» manual=»pgrep%20-l%20-P%201576″ message=»» highlight=»» provider=»manual»/]
Antes de reemplazar pgrep por pkill, preguntémonos si realmente deseamos matar todos esos procesos. Si la respuesta es sí, ¡a la carga!
[pastacode lang=»bash» manual=»pkill%20-P%201576″ message=»» highlight=»» provider=»manual»/]
En la Fig. 2 podemos ver el antes y el después:
En la Fig. 2 podemos ver que en la segunda ejecución de pkill ya no aparecen ninguno de los procesos (por PID) que aparecían en la primera.
En este caso, el proceso padre (PID 1576) volvió a iniciar los procesos relacionados con el servidor web Apache (httpd) a fin de prepararse para poder atender las conexiones entrantes.
En este post aprendimos cómo matar procesos en Linux, tanto de manera aislada como aquellos que comparten una característica común. Si en vez de realizar la identificación por PPID quisiéramos hacerlo a partir del propietario o del grupo dueño del proceso, simplemente deberemos reemplazar la opción -P
con -u
o -G
, respectivamente, seguido del nombre o del identificador del usuario o grupo.
¡Nos leemos nuevamente en breve!