Comando nohup: uso, nohup.out y cómo seguir ejecutando tras cerrar la terminal
Para que un trabajo siga en marcha aunque cierres la terminal o se corte la conexión SSH, ejecútalo con el comando nohup. nohup ejecuta el comando haciendo que ignore la señal de cuelgue (SIGHUP) que llega cuando se cierra la terminal. Al lanzar a la vez en un servidor AlmaLinux 9 un sleep con nohup y otro sin él y cerrar la terminal, solo quedó en ejecución el que se lanzó con nohup.
La salida de abajo se obtuvo en un servidor AlmaLinux 9.8 (cuenta root) y en un servidor Debian 12 (cuenta normal). En lugar de un trabajo largo se lanzó sleep, y para terminarlo solo se indicó el PID recibido al lanzarlo. Las horas se muestran en UTC.
1️⃣ Cómo usar el comando nohup
nohup se pone delante del comando que vas a ejecutar, y el & al final del comando indica la ejecución en segundo plano. Según el manual oficial de GNU, nohup por sí mismo no envía el comando al segundo plano, así que sin el & el prompt no vuelve hasta que termina el comando.
nohup sleep 300 &[1] 3431609
nohup: ignoring input and appending output to 'nohup.out'[1] es el número de trabajo y 3431609 es el PID del proceso lanzado. El mensaje que salió después avisa de que no leerá la entrada del teclado y de que añadirá la salida al archivo nohup.out.
El PID del trabajo que acabas de lanzar queda en $!, así que si lo compruebas con [echo $!] justo después de lanzarlo y lo apuntas, podrás usar ese mismo número para ver su estado o para terminarlo.
echo $!3431609Al cerrar la terminal, el shell recibe la señal de cuelgue y envía la misma señal a los trabajos que lanzó (según el manual oficial de Bash). Para comprobarlo, en una terminal nueva se lanzaron a la vez [nohup sleep 300 &] y, sin nohup, [sleep 301 &].
sleep 301 &[2] 3432892jobs -l[1]- 3432883 Running nohup sleep 300 &
[2]+ 3432892 Running sleep 301 &Con los dos trabajos en Running se cerró la ventana de la terminal y, desde otro shell, se comprobaron los dos PID con ps.
ps -p 3432883,3432892 -o pid,stat,etime,cmd PID STAT ELAPSED CMD
3432883 S 00:05 sleep 300Solo quedó sleep 300, lanzado con nohup; sleep 301, lanzado sin nohup, terminó al cerrar la terminal.
Un proceso lanzado con nohup es como un móvil con el modo No molestar activado.
nohup es un comando del paquete coreutils. La versión instalada se ve en la primera línea de --version. El servidor AlmaLinux 9.8 tenía la 8.32 y el servidor Debian 12, la 9.1.
nohup --version | head -1nohup (GNU coreutils) 8.32nohup --version | head -1nohup (GNU coreutils) 9.12️⃣ nohup.out y redirección de la salida
Si no indicas adónde va la salida, nohup añade la salida del comando a nohup.out en la carpeta actual. El nohup.out recién creado medía 0 bytes y sus permisos eran -rw-------, de lectura y escritura solo para el usuario que lo creó.
ls -l nohup.out-rw------- 1 root root 0 Oct 28 23:04 nohup.outEl manual oficial de GNU explica que nohup crea nohup.out de forma que solo pueda leerlo y escribirlo el usuario que lo creó, sea cual sea la configuración de umask. Si no puede escribir en la carpeta actual, escribe en $HOME/nohup.out de la carpeta personal, y si tampoco puede escribir allí, no ejecuta el comando.
Al ejecutar con nohup un comando que genera salida, la salida quedó en nohup.out después de que terminara el comando.
nohup sh -c 'echo start; sleep 2; echo end' &[1] 3431985
nohup: ignoring input and appending output to 'nohup.out'cat nohup.outstart
end
[1]+ Done nohup sh -c 'echo start; sleep 2; echo end'El Done de la última línea es el aviso del shell de que el trabajo terminó. nohup.out no se crea de nuevo en cada ejecución, sino que se va añadiendo al final del mismo archivo, así que si lanzas varios trabajos desde la misma carpeta, sus salidas se mezclan en un solo archivo.
Para separar el log de cada trabajo, indica el archivo de salida con > y envía también la salida de errores al mismo archivo con 2>&1.
nohup sh -c 'echo start; sleep 300' > job.log 2>&1 &[1] 3432059cat job.lognohup: ignoring input
startAl añadir también 2>&1, en la terminal solo salieron el número de trabajo y el PID, y el aviso de nohup [nohup: ignoring input] quedó en la primera línea del archivo de log.
Si pones solo > y quitas 2>&1, en la terminal sale un aviso de que la salida de errores se envía al archivo de la salida estándar.
nohup sleep 300 > job2.log &[2] 3432097
nohup: ignoring input and redirecting stderr to stdoutLa salida de los trabajos que no necesitas guardar se envía a /dev/null. También aquí, en la terminal solo salieron el número de trabajo y el PID.
nohup sleep 300 > /dev/null 2>&1 &[3] 3432137En la tabla de abajo se ve adónde fue la salida y qué mensaje salió en la terminal con cada una de las cuatro formas de ejecución.
| Forma de ejecución | Adónde va la salida | Mensaje en la terminal |
|---|---|---|
| nohup comando & | nohup.out de la carpeta actual | nohup: ignoring input and appending output to 'nohup.out' |
| nohup comando > archivo & | El archivo indicado (con la salida de errores) | nohup: ignoring input and redirecting stderr to stdout |
| nohup comando > archivo 2>&1 & | El archivo indicado | Ninguno (el aviso va en la primera línea del archivo) |
| nohup comando > /dev/null 2>&1 & | Se descarta | Ninguno |
3️⃣ Comprobar y terminar procesos nohup
La lista de jobs solo muestra los trabajos lanzados desde el shell actual, así que después de cerrar la terminal y volver a conectarte, comprueba el proceso nohup con ps -p indicando su PID. Mientras sigas en el mismo shell, jobs -l muestra juntos el número de trabajo, el PID y el estado.
jobs -l[1]+ 3431609 Running nohup sleep 300 &Si escribes un PID después de ps -p y eliges columnas con -o, solo sale la línea de ese proceso. La S de STAT indica que está dormido esperando un evento, y ELAPSED es el tiempo transcurrido desde que empezó.
ps -p 3431609 -o pid,stat,etime,cmd PID STAT ELAPSED CMD
3431609 S 00:03 sleep 300Para terminarlo, usa kill seguido del PID.
kill 3431609kill no mostró nada y, al ejecutar jobs a continuación, el trabajo apareció como Terminated y luego desapareció de la lista.
jobs[1]+ Terminated nohup sleep 300Al volver a ejecutar ps con el mismo PID solo salió la cabecera, lo que confirmó que el proceso había terminado.
ps -p 3431609 -o pid,stat,etime,cmd PID STAT ELAPSED CMDnohup solo ignora la señal de cuelgue, así que enviar esa misma señal directamente con [kill -HUP] no lo termina. Se envió kill -HUP a sleep 305, lanzado con nohup, y a sleep 306, lanzado sin nohup.
kill -HUP 3437119 3437128Al comprobarlo después con jobs -l, solo el de nohup seguía en Running, y sleep 306 terminó con Hangup.
jobs -l[1]- 3437119 Running nohup sleep 305 &
[2]+ 3437128 Hangup sleep 306Si no indicas una señal a kill, envía SIGTERM, así que un trabajo lanzado con nohup también termina con [kill PID].
4️⃣ Comando nohup frente a disown y opciones
🔲 nohup frente a disown
disown es un comando interno de bash que se usa con trabajos ya lanzados: sirve para separar más tarde de la señal de cuelgue de la terminal un trabajo lanzado con & pero sin nohup. disown no envía la salida a nohup.out, así que, para un trabajo que genera salida, indica adónde va con > archivo al lanzarlo.
Según el manual oficial de Bash, disown sin opciones saca el trabajo de la lista de jobs, mientras que disown -h lo deja en la lista y solo evita que le llegue la señal de cuelgue. Primero se lanzó sleep 302 y luego se ejecutó disown.
sleep 302 &[1] 3433230disowndisown no mostró nada, y jobs -l, ejecutado a continuación, también devolvió un resultado vacío.
jobs -lDespués se lanzó sleep 303 y se ejecutó disown -h sobre el número de trabajo %1.
sleep 303 &[1] 3433343disown -h %1Al comprobarlo con jobs -l, el trabajo seguía en la lista.
jobs -l[1]+ 3433343 Running sleep 303 &Se lanzó además sleep 304 sin ningún tratamiento, se cerró la terminal y desde otro shell se comprobaron los tres PID.
sleep 304 &[2] 3433474ps -p 3433230,3433343,3433474 -o pid,stat,etime,cmd PID STAT ELAPSED CMD
3433230 S 00:11 sleep 302
3433343 S 00:08 sleep 303Los dos trabajos con disown y disown -h quedaron, y solo terminó sleep 304, que no tenía ningún tratamiento. Los cuatro métodos se comparan así.
| Método | Cuándo se usa | Lista de jobs | Tras cerrar la terminal | Salida |
|---|---|---|---|---|
| nohup comando & | Al lanzar | Sigue | Sigue | nohup.out o el archivo indicado |
| comando & y luego disown | Tras lanzar | Se omite | Sigue | Sin cambios |
| comando & y luego disown -h | Tras lanzar | Sigue | Sigue | Sin cambios |
| Solo comando & | — | Sigue | Terminado | Sin cambios |
Para trabajos en los que tienes que recuperar la pantalla de la sesión y seguir escribiendo, lo adecuado es un multiplexor de terminal como tmux; para trabajos que lanzas una vez y de los que solo recoges el resultado en un archivo, nohup es suficiente.
🔲 Opciones del comando nohup
📌 Opciones principales: resultados de este artículo
| Opción | Tarea | Resultado en este artículo | |
|---|---|---|---|
| --version | Muestra la información de versión y sale | Servidor AlmaLinux 9.8: nohup (GNU coreutils) 8.32; servidor Debian 12: nohup (GNU coreutils) 9.1 |
📎 Otras opciones: según el manual oficial
| Opción | Tarea | |
|---|---|---|
| --help | Muestra la ayuda y sale |
🔲 Simulador del comando nohup
En el simulador de abajo puedes lanzar un trabajo con nohup, cerrar la terminal y volver a conectarte con el chip 🔌, y comprobar por ti mismo qué procesos quedan.
🔢 FAQ & contenido recomendado
Programar tareas
Linux: configurar crontab
Configuración de crontab, el programador de Linux que registra trabajos para repetirlos a horas fijas, como copias de seguridad o limpieza de logs.
Procesos
Comando top de Linux (ver el uso de CPU y memoria)
El comando top, que muestra en tiempo real el uso de CPU y memoria de cada proceso.
ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.