Linux en Español

10+ ejemplos para cerrar un proceso en Linux

En este tutorial, hablaremos de cerrar un proceso en Linux con múltiples ejemplos. En la mayoría de los casos, es tan simple como escribir el comando “kill” seguido del ID del proceso (comúnmente abreviado como PID).

cerrar un proceso


En la captura de pantalla de arriba, hemos matado un proceso con la identificación de 1813.

Si usted es un usuario de Windows, puede ayudar pensar en el comando ‘kill’ como el equivalente de Linux del botón ‘End task’ dentro del Administrador de tareas Windows.

 

 

Listar los procesos en ejecución

El comando “ps -e” listará todo lo que se está ejecutando en su sistema. Incluso con una instalación mínima, el comando probablemente producirá más de 80 resultados, por lo que es mucho más fácil canalizar el comando a ‘ grep‘ o ‘more’.

ps -e | grep name-of-process

En la siguiente captura de pantalla, comprobamos si SSH se está ejecutando en el sistema.

Compruebe si el proceso se está ejecutando

Esto también nos da el PID del demonio SSH, que es 1963.

Conecta con ‘más’ si quieres ver los procesos en ejecución de su sistema uno por uno.

Listar los procesos en ejecución

También puede utilizar el comando ‘top’ para ver una lista de los procesos en ejecución. Esto es útil porque le mostrará cuántos recursos del sistema está usando cada proceso.

Enumerar procesos usando el comando top

El PID, el usuario y el nombre del recurso se identifican aquí, lo cual es útil si decide eliminar alguno de estos servicios más tarde.

Preste atención a las columnas %CPU y %MEM, porque si nota un proceso sin importancia masticando valiosos recursos del sistema, ¡probablemente sea beneficioso matarlo!

Otra forma muy eficiente de obtener el ID de proceso correspondiente es usar el comando ‘pgrep’. El único argumento que necesita proporcionar es el nombre (o parte del nombre) del proceso en ejecución.

Esto es lo que parece cuando buscamos SSH. Como puede ver, devuelve un ID de proceso de 2506.

Usando pgrep


Cerrar yn proceso por PID

Ahora que conocemos el PID del SSH daemon, podemos cerrar el proceso con el comando kill.

$ sudo kill 1963

Cerrar yn proceso por PID

Puede emitir un comando ‘ps’ final, sólo para asegurarse de que el proceso fue efectivamente cerrado.

$ ps -e | grep ssh

Los resultados no se obtienen, lo que significa que el proceso se cerró con éxito. Si observa que el proceso continúa ejecutándose – lo que normalmente no debería suceder – puede intentar enviar una señal de eliminación diferente al proceso, como se explica en la siguiente sesión.

Nota: No siempre es necesario usar ‘sudo’ o la cuenta de usuario raíz para finalizar un proceso. En el ejemplo anterior, estábamos terminando el demonio SSH, que se ejecuta bajo el usuario raíz, por lo tanto, debemos tener los permisos apropiados para terminar el proceso.


Señal por defecto enviada por el comando kill

Por defecto, el comando kill enviará una señal SIGTERM al proceso que especifique.

Esto debería permitir que el proceso termine con gracia, ya que SIGTERM le dirá al proceso que realice sus procedimientos normales de apagado – en otras palabras, no fuerza al proceso a terminar abruptamente.

Esto es algo bueno porque queremos que nuestros procesos se apaguen de la forma en que se pretende.

A veces, sin embargo, la señal del SIGTERM no es suficiente para matar un proceso. Si ejecuta el comando de matar y nota que el proceso todavía está en marcha, el proceso puede estar todavía pasando por su proceso de apagado, o puede haberse colgado por completo.

Forzar el cierre

Para forzar al proceso a que se cierre y renuncie a su apagado normal, puede enviar una señal de SIGKILL con el interruptor -9, como se muestra aquí:

$ kill -9 processID

Forzar el cierre

Puede ser tentador añadir siempre el interruptor -9 a sus comandos de matanza, ya que siempre funciona. Sin embargo, esta no es la mejor práctica recomendada. Sólo debería usarlo en procesos que se cuelgan y que se niegan a apagarse correctamente.

Cuando sea posible, utilice la señal SIGTERM por defecto. Esto evitará errores a largo plazo, ya que le da al proceso la oportunidad de cerrar sus archivos de registro, terminar cualquier conexión que quede, etc.

Aparte de las señales SIGTERM y SIGKILL, hay un montón de otras señales que kill puede enviar a los procesos, todas las cuales se pueden ver con el interruptor -l.

señales de cerrar

Los números que aparecen junto a los nombres son los que usted especificaría en su comando ‘kill’. Por ejemplo, kill -9 es SIGKILL, tal y como se ve en la captura de pantalla anterior.

Para las operaciones diarias, SIGTERM y SIGKILL son probablemente las únicas señales que nunca necesitarás usar. Simplemente tenga en cuenta las otras en caso de que tenga una circunstancia extraña en la que un proceso recomiende terminarlo con una señal diferente.


¿Cómo cerrar todos los procesos por su nombre?

También puede usar el nombre de un proceso en ejecución, en lugar del PID, con el comando pkill. Pero tenga cuidado, esto terminará todos los procesos que se estén ejecutando bajo el nombre especificado, ya que kill no sabrá qué proceso específico está tratando de terminar.

$ pkill name-of-process

Vea el siguiente ejemplo donde terminamos cinco procesos con un solo comando pkill.

finalizar un proceso usando pkill

En este ejemplo, habíamos querido terminar sólo una de esas sesiones de pantalla, habría sido necesario especificar el PID y usar el comando normal ‘kill’. De lo contrario, no hay forma de especificar de forma única el proceso que queremos terminar.

¿Cómo cerrar todos los procesos por un usuario?

También puede utilizar el comando pkill para terminar todos los procesos que están siendo ejecutados por un usuario Linux. Primero, para ver qué procesos se están ejecutando bajo un usuario específico, use el comando ps con una opción -u.

$ ps -u username

Lista de procesos ejecutados por un usuario

Esta captura de pantalla nos muestra que actualmente hay 5 servicios funcionando bajo el usuario ‘geek’. Si necesitas terminar todos ellos rápidamente, puedes hacerlo con pkill.

$ pkill -u username

comando pkill


¿Cómo se cerrar un proceso de nohup?

El proceso nohup se mata de la misma manera que cualquier otro proceso en marcha. Tenga en cuenta que no puede hacer un grep para “nohup” en el comando ps, por lo que tendrá que buscar el proceso en ejecución usando los mismos métodos que se muestran arriba.

En este ejemplo, encontramos un script titulado ‘test.sh’ que ha sido ejecutado con el comando nohup. Como verás, encontrar y terminar es muy parecido a los ejemplos anteriores.

cerrar un proceso de nohup

La única diferencia con la salida es que se nos notifica que el proceso se ha terminado. Esto no es parte de kill, sino más bien el resultado de ejecutar el script en segundo plano (el ampersand en este ejemplo) y estar conectado a la misma tty desde la que se inició el script.

$ nohup ./test.sh &

¿Cómo ejecutar un proceso en el fondo?

El comando “kill” es una forma eficiente de terminar procesos que se están ejecutando en el fondo. Ya ha aprendido a matar procesos en este tutorial, pero saber cómo ejecutar un proceso en segundo plano es una combinación efectiva para usar con el comando kill.

Puede agregar un ampersand (&) a su comando para que se ejecute en segundo plano. Esto es útil para los comandos o scripts que tardarán un tiempo en ejecutarse, y usted desea hacer otras tareas mientras tanto.

ejecutar un proceso en el fondo utilizando ampersand

Aquí hemos puesto un simple comando ‘ls’ en el fondo. Dado que es el tipo de comando que toma muy poco tiempo en ejecutarse, se nos da más salida acerca de que termine su trabajo directamente después.

La salida en nuestra captura de pantalla dice “Done”, lo que significa que el trabajo en el fondo se ha completado con éxito. Si en lugar de eso matara el trabajo, se mostraría “terminado” en la salida.

También puedes mover un trabajo al fondo presionando Ctrl+Z en tu teclado. La ^Z en esta captura de pantalla indica que se ha pulsado Ctrl+Z y que el script test.sh se ha movido al fondo.

ejecutar un proceso en el fondo usando CTRL + Z

Puede ver que el archivo test.sh continúa ejecutándose en segundo plano al emitir un comando ps.

$ ps -e | grep test.sh

Lista de procesos en el fondo

Using screen command

Otra forma de ejecutar un proceso en segundo plano es utilizar el comando ‘screen’. Esto funciona creando lo que básicamente equivale a una ventana de terminal separada (o pantalla… de ahí el nombre).

A cada pantalla que usted cree se le dará su propio ID de proceso, lo que significa que es una forma eficiente de crear procesos en segundo plano que pueden ser terminados más tarde usando el comando ‘kill’.

La pantalla no está incluida en todas las instalaciones de Linux por defecto, por lo que puede que tenga que instalarla, especialmente si no está ejecutando una distribución destinada específicamente a servidores.

En las distribuciones basadas en Ubuntu y Debian, se puede instalar con el siguiente comando:

$ sudo apt-get install screen

Una vez instalado el comando de la pantalla, puede crear una nueva sesión con sólo tipeando ‘screen’.

$ screen

Pero, antes de hacer eso, es bueno acostumbrarse a especificar nombres para sus pantallas. De esa manera, son fáciles de buscar e identificar más tarde. Todo lo que necesitas para especificar un nombre es el interruptor -S.

$ screen -S my-screen-name

Hagamos una pantalla llamada “testing” y luego intentemos terminarla con el comando “kill”. Empezamos así:

comando screen

Después de escribir este comando y de presionar enter, somos llevados instantáneamente a nuestra recién creada pantalla. Aquí es donde se puede iniciar el proceso que se desea que se ejecute en segundo plano.

Esto es especialmente útil si usted es SSH’d en un servidor y necesita un proceso para continuar ejecutándose incluso después de desconectarse.

Con tu comando/script en ejecución, puedes desconectarte de la pantalla pulsando Ctrl+A, seguido de D (suelta las teclas Ctrl y A antes de pulsar la tecla D).

Desconectarse de screen

Como puede ver, el comando de la pantalla ha listado el ID del proceso tan pronto como hemos separado la pantalla. Por supuesto, podemos terminar esta pantalla (y el comando/script que se ejecuta dentro de ella), usando el comando kill.

Puede buscar fácilmente el ID del proceso de sus sesiones de pantalla usando este comando:

$ screen -ls

Lista de sesiones screen

Si no hubiéramos nombrado nuestra sesión de pantalla usando la opción -S, sólo el ID del proceso mismo aparecería en la lista. Para volver a conectar a cualquiera de las pantallas listadas, puede utilizar la opción -r:

$ screen -r name-of-screen

o

$ screen -r PID

Vuelva a colocar el proceso screen

En la siguiente captura de pantalla, estamos matando la sesión de pantalla que creamos (junto con todo lo que se está ejecutando dentro de ella), y luego emitiendo otro comando screen -ls para verificar que el proceso ha terminado efectivamente.

cerrar screen sesión

 

¿Cómo cerrar un proceso de fondo?

En uno de los ejemplos de la sección anterior, pusimos nuestro script tesh.sh para que se ejecutara en segundo plano. La mayoría de los procesos en segundo plano, especialmente los comandos simples, terminarán sin ningún problema.

Sin embargo, al igual que cualquier proceso, uno en segundo plano puede negarse a apagarse fácilmente. Nuestro script tesh.sh tiene un PID de 2382, por lo que emitiremos el siguiente comando:

$ kill 2383

En la captura de pantalla, sin embargo, notará que el guion ha ignorado nuestro comando kill:

ignorado nuestro comando kill

Como ya hemos aprendido, kill -9 es la mejor manera de cerrar un proceso que está colgado o que se niega a terminar.

Forzar el cierre

 

Como cerrar procesos detenidos?

Puede ser útil matar todos los trabajos de fondo que se han detenido de una vez si se han acumulado y ya no le son útiles. Por ejemplo, estamos ejecutando tres instancias de nuestro script test.sh en segundo plano y se han detenido:

$ ./test.sh &

Detener un proceso

Puede ver estos procesos con el comando ps:

$ ps -e | grep test.sh

Lista de procesos

O, para obtener una lista de todos los trabajos detenidos en el sistema, puede ejecutar el comando jobs:

$ jobs

Lista de procesos detenidos

La forma más fácil de matar todos los trabajos detenidos es con el siguiente comando:

$ kill `jobs -ps`

O usar el interruptor -9 para asegurarse de que los trabajos terminen inmediatamente::

$ kill -9 `jobs -ps`

cerrar procesos detenidos

El comando `jobs -ps` listará todos los PIDs de los trabajos que se estén ejecutando en segundo plano, por lo que podemos combinar su salida con el comando kill para terminar todos los procesos detenidos.

 

Cerrar una operación no permitida

Si obtiene un error de “operación no permitida” al intentar matar un proceso, es porque no tiene los permisos adecuados. O bien inicie sesión en la cuenta de raíz o use ‘sudo’ (en las distribuciones de Debian) antes de su comando de cerrar.

$ sudo kill PID

permiso de sudo kill

Espero que el tutorial le sea útil. Siga regresando.

Mokhtar Ebrahim
Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *