Cómo matar un proceso o detener un programa en Linux

Cuando un proceso se comporta mal, es posible que a veces quieras terminarlo o matarlo. En este post, exploraremos algunas formas de terminar un proceso o una aplicación desde la línea de comandos, así como desde una interfaz gráfica, utilizando gedit como una aplicación de ejemplo.

Usando la línea de comandos/caracteres de terminación

Ctrl + C

Un problema al invocar gedit desde la línea de comandos (si no está usando gedit &) es que no liberará el prompt, por lo que la sesión del shell se bloquea. En tales casos, Ctrl+C (la tecla Control en combinación con ‘C’) es muy útil. Eso terminará gedit y todo el trabajo se perderá (a menos que el archivo se haya guardado). Ctrl+C envía la señal SIGINT a gedit. Esta es una señal de parada cuya acción por defecto es terminar el proceso. Indica al shell que detenga gedit y regrese al bucle principal, y se recuperará el prompt.

$ gedit
^C

Ctrl + Z

Esto se llama carácter de suspensión. Envía una señal SIGTSTP para procesar. También es una señal de parada, pero la acción por defecto no es matar sino suspender el proceso.

Detendrá (matar/terminar) gedit y devolverá el prompt del shell.

$ gedit
^Z
+ Stopped gedit
$

Una vez suspendido el proceso (en este caso, gedit), no es posible escribir ni hacer nada en gedit. En el fondo, el proceso se convierte en un trabajo. Esto puede ser verificado por el comando jobs.

$ jobs
+ Stopped gedit

jobs le permite controlar múltiples procesos dentro de una sola sesión de shell. Puede detener, reanudar y mover trabajos al fondo o al primer plano según sea necesario.

Reanudemos gedit en el fondo y liberemos un prompt para ejecutar otros comandos. Puede hacer esto usando el comando bg, seguido por el ID del trabajo (fíjese en de la salida de jobs arriba. es el ID del trabajo).

$ bg 1
+ gedit &

Esto es similar a iniciar gedit con &,:

 $ gedit &

Usando kill

kill permite un control fino sobre las señales, permitiéndole señalar un proceso especificando un nombre de señal o un número de señal, seguido de un ID de proceso, o PID.

Lo que me gusta de kill es que también puede trabajar con IDs de trabajos. Vamos a iniciar gedit en el fondo usando gedit &. Suponiendo que tengo un ID de trabajo de gedit desde el comando jobs, enviemos SIGINT a gedit:

 $ kill -s SIGINT %1

Note que el ID de trabajo debe ser prefijado con %, o kill lo considerará un PID.

kill puede trabajar sin especificar una señal explícitamente. En ese caso, la acción por defecto es enviar SIGTERM, que terminará el proceso. Ejecute kill -l para listar todos los nombres de señales, y utilice el comando man kill para leer la página man.

Usando killall

Si no quiere especificar un ID de trabajo o PID, killall le permite especificar un proceso por su nombre. La forma más sencilla de terminar gedit usando killall es:

 $ killall gedit

Esto matará todos los procesos con el nombre gedit. Al igual que kill, la señal por defecto es SIGTERM. Tiene la opción de ignorar el caso usando -I:

$ gedit &
14852
$ killall -I GEDIT
+ Terminated gedit

Para aprender más sobre varias banderas proporcionadas por killall (como -u, que le permite matar los procesos propiedad del usuario) consulte la página man (man killall)

Usando xkill

¿Alguna vez se ha encontrado con un problema en el que un reproductor multimedia, como VLC, se puso en gris o se colgó? Ahora puede encontrar el PID y matar la aplicación utilizando uno de los comandos mencionados anteriormente o utilizar xkill.

xkill le permite matar una ventana utilizando el ratón. Simplemente ejecute xkill en un terminal, que debería cambiar el cursor del ratón a una x o a un pequeño icono de una calavera. Haga clic en la x de la ventana que desea cerrar. Sin embargo, tenga cuidado al usar xkill, ya que su página de manual explica que puede ser peligroso. Consulte la página del manual de cada comando para obtener más información. También puede explorar comandos como pkill y pgrep.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.