Cómo controlar procesos en la terminal con Ctrl+Z, fg, bg, jobs y kill

#tips#terminal

Si trabajas mucho en la terminal, seguro te ha pasado algo como esto.

Estás ejecutando un comando:

$ npm run dev

Y de repente te das cuenta de que necesitas volver al shell para ejecutar otra cosa.

Una opción es abrir otra terminal. Pero muchas veces no es necesario.

Los shells como Bash o Zsh tienen un sistema de control de procesos en foreground y background muy potente.

Con él puedes:

Los comandos principales son:

Vamos a ver cómo funcionan.


Pausar un proceso en la terminal con Ctrl+Z

Supongamos que estás ejecutando algo en la terminal:

$ python server.py

El proceso está ocupando la terminal.

Si presionas Ctrl + Z, verás algo como:

stopped python server.py

El proceso no se ha terminado, simplemente está suspendido.

Ahora tienes de nuevo el control de la terminal.

Nota

En algunos sistemas puede aparecer la palabra suspended en vez de stopped.

Ambos significan lo mismo:

El proceso sigue existiendo, pero está pausado y no ejecutándose.


Ver procesos suspendidos con el comando jobs

Para ver qué procesos tienes suspendidos puedes usar:

$ jobs

Y verás algo como:

[1]+ stopped python server.py

Ese [1] es el job id.

La terminal usa ese número para referirse al proceso.


Traer un proceso al foreground con fg

Si quieres volver al proceso que suspendiste puedes usar:

$ fg

Esto lo traerá al foreground otra vez.

Si tienes varios jobs puedes indicar cuál:

$ fg %1

Ahora el proceso vuelve a ocupar la terminal.


Enviar un proceso al background con bg

Después de hacer Ctrl+Z, también puedes mandar el proceso al background:

$ bg

Ejemplo de salida:

[1]+ continued python server.py &

Ahora el proceso sigue ejecutándose, pero ya no ocupa la terminal.

Puedes seguir usando el shell normalmente.


Ejemplo práctico usando Ctrl+Z y bg

Imagina que estás ejecutando:

$ npm run dev

Y necesitas ejecutar otro comando, por ejemplo:

git status

En lugar de abrir otra terminal puedes hacer esto:

  1. Suspender el proceso: Ctrl + Z
  2. Enviarlo al background: bg
  3. Ejecutar el otro comando

El servidor seguirá ejecutándose mientras trabajas en la terminal.


Terminar un proceso con kill

Si ya no necesitas el proceso puedes terminarlo.

Primero mira los jobs:

$ jobs
[1]+ Running npm run dev &

Luego puedes matarlo con:

$ kill %1

La sintaxis %1 se refiere al job id.

También puedes matar el último proceso con:

$ kill %%

Resumen rápido

Los comandos más útiles para controlar procesos en la terminal son:

AcciónComando
Suspender procesoCtrl + Z
Ver procesosjobs
Enviar al foregroundfg %<id>
Enviar al backgroundbg %<id>
Terminar procesokill %<id>

Cuándo es útil controlar procesos en la terminal

Esto es especialmente útil cuando:

No es algo complicado, pero una vez que te acostumbras es difícil dejar de usarlo.


FAQ

¿Qué hace Ctrl+Z en la terminal?

Ctrl+Z suspende el proceso actual. El proceso no termina, simplemente queda pausado.

¿Qué diferencia hay entre fg y bg?

¿Cómo ver los procesos en segundo plano?

Puedes usar el comando:

$ jobs

para ver todos los procesos gestionados por el shell actual.


Fuentes