nohup
Corre un comando y sigue corriendo aunque cierres la terminal.
Sirve para que un proceso siga funcionando cuando cierras la sesión de terminal (SIGHUP). Lo usas para dejar corriendo un script, servidor o descarga por largo tiempo sin quedarte conectado.
nohup COMANDO [ARG]...Despiece
5 ejemplosDejar corriendo un script en segundo plano
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | nohup | Comando | Ignora la señal de cierre de terminal (SIGHUP). |
| 2 | ./script.sh | Argumento | El script que quieres dejar corriendo. |
| 3 | & | Operador | Lo manda a segundo plano. |
El script sigue corriendo aunque cierres la terminal. La salida va a nohup.out en la carpeta actual (o en $HOME si no puedes escribir ahí).
Guardar la salida en otro archivo
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | nohup | Comando | Ignora el cierre de terminal. |
| 2 | python3 | Comando | Intérprete de Python. |
| 3 | app.py | Argumento | Aplicación a correr. |
| 4 | > | Operador | Redirige la salida estándar al archivo. |
| 5 | logs.txt | Argumento | Archivo donde se guarda la salida. |
| 6 | 2>&1 | Operador | Redirige errores (stderr) a la salida estándar. |
| 7 | & | Operador | Lo manda a segundo plano. |
La aplicación corre aunque cierres la terminal y toda la salida (normal y errores) queda en logs.txt.
Correr una descarga larga
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | nohup | Comando | Protege el proceso si cierras la terminal. |
| 2 | wget | Comando | Descarga el archivo. |
| 3 | https://ejemplo.com/archivo.iso | Argumento | URL del archivo a descargar. |
| 4 | & | Operador | Lo manda a segundo plano. |
wget sigue descargando aunque te desconectes de SSH. El avance va a nohup.out.
Correr un comando y ver su PID
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | nohup | Comando | Protege el proceso. |
| 2 | sleep | Comando | Espera el tiempo indicado. |
| 3 | 3600 | Valor | 3600 segundos (1 hora). |
| 4 | & | Operador | Manda a segundo plano. |
| 5 | echo | Comando | Muestra texto en pantalla. |
| 6 | $! | Valor | Muestra el PID del proceso que acabas de mandar a segundo plano. |
Te aparece el PID (por ejemplo 12345). Así lo revisas después con ps o lo detienes con kill 12345.
Redirigir solo errores a un archivo
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | nohup | Comando | Ignora cierre de terminal. |
| 2 | ./app | Argumento | Aplicación a correr. |
| 3 | > | Operador | Redirige salida estándar. |
| 4 | /dev/null | Argumento | Descarta la salida normal. |
| 5 | 2> | Operador | Redirige errores (stderr) a archivo. |
| 6 | errores.log | Argumento | Archivo donde van solo los errores. |
| 7 | & | Operador | Segundo plano. |
La app corre aunque cierres la terminal, no ves salida normal y solo los errores van a errores.log.
Fallas comunes
| Falla | Remedio |
|---|---|
| Olvidar el & y quedarte esperando. | Agrega & al final para mandarlo a segundo plano. También puedes pausar (Ctrl+Z) y luego ponerlo a correr con bg. |
| Pensar que nohup evita que lo maten. | nohup solo evita que SIGHUP lo cierre al cerrar la terminal. SÍ lo puedes matar con kill o pkill. |
| Buscar salida y no encontrarla. | Por defecto va a nohup.out en el directorio actual. Si no pudo escribir ahí, va a $HOME/nohup.out. Revisa ahí. |
| Encerrar todo el comando entre comillas o usar pipes directamente. | nohup recibe el comando y sus argumentos por separado: nohup python3 script.py --modo prod &. Si pones todo entre comillas, busca un programa con ese nombre completo y falla. Para pipes o varios comandos usa una shell: nohup sh -c 'comando1 | comando2' &. |
Preguntas frecuentes
- ¿Para qué sirve nohup?
- Para que un comando siga corriendo aunque cierres la terminal o pierdas la conexión SSH. Ignora la señal SIGHUP (hangup).
- ¿Dónde guarda la salida nohup?
- Si la salida es a terminal, la añade a nohup.out en la carpeta actual. Si no puede escribir ahí, la añade a $HOME/nohup.out. Puedes redirigirla a otro archivo con > archivo.
- ¿Cuál es la diferencia entre nohup y &?
- & manda el proceso a segundo plano, pero si cierras la terminal, muchos shells envían SIGHUP y lo matan. nohup evita ese cierre; lo común es usar ambos: nohup comando &.
- ¿Cómo detengo un proceso que corrí con nohup?
- Buscas su PID con ps aux | grep nombre o con jobs si sigue en tu sesión, y lo matas con kill PID (o pkill por nombre). nohup no lo protege contra kill.
- ¿Necesito sudo para usar nohup?
- No, funciona para tu propio usuario. Solo necesitas permisos para correr el comando que pasas a nohup.