El nohup
El comando ejecuta otro programa especificado como su argumento e ignora todos los SIGHUP
(colgar) señales. SIGHUP
es una señal que se envía a un proceso cuando se cierra su terminal de control.
Por lo general, cuando ejecuta un programa a través de SSH, si su conexión se cae o cierra la sesión, la sesión finaliza y todos los procesos ejecutados desde la terminal se detendrán. Aquí es donde el nohup
El comando es útil. Ignora todas las señales de colgado y el proceso continuará ejecutándose.
Cómo usar el comando nohup #
La sintaxis para nohup
El comando es el siguiente:
nohup COMMAND [ARGS]
El comando no acepta ninguna otra opción excepto el estándar --help
y --version
.
Echemos un vistazo al siguiente ejemplo:
nohup mycommand
nohup: ignoring input and appending output to 'nohup.out'
nohup
ejecuta mycommand
comando en primer plano y redirige la salida del comando a nohup.out
expediente. Este archivo se crea en el directorio de trabajo actual. Si el usuario que ejecuta el comando no tiene permisos de escritura en el directorio de trabajo, el archivo se crea en el directorio de inicio del usuario.
Si cierra la sesión o cierra la terminal, el proceso no finaliza.
Ejecutando el comando en segundo plano #
Usando nohup
en primer plano no es muy útil porque no podrá interactuar con el shell hasta que se complete el comando.
Para ejecutar el comando en segundo plano, agregue el &
símbolo al final del comando:
nohup mycommand &
El resultado incluye el ID del trabajo de shell (entre corchetes) y el ID del proceso:
[1] 25177
Puede usar la identificación del trabajo para traer el comando al primer plano usando fg
comando.
Si por alguna razón desea finalizar el proceso, use kill
comando seguido del ID del proceso:
kill -9 25132
Redireccionar salida a un archivo #
Por defecto, nohup
redirige la salida del comando a nohup.out
expediente. Si desea redirigir la salida a un archivo diferente, use la redirección de shell estándar.
Por ejemplo, para redirigir la salida estándar y el error estándar a mycommand.out
usarías:
nohup mycommand > mycommand.out 2>&1 &
Para redirigir la salida estándar y el error estándar a diferentes archivos:
nohup mycommand > mycommand.out 2> mycommand.err &
Alternativas #
Hay varios programas alternativos que puede usar para evitar que un comando termine cuando cierra la terminal o se desconecta.
Pantalla #
Screenor GNU Screen es un programa multiplexor de terminal que le permite iniciar una sesión de pantalla y abrir cualquier número de ventanas (terminales virtuales) dentro de esa sesión. Los procesos que se ejecutan en Pantalla continuarán ejecutándose cuando su ventana no esté visible, incluso si se desconecta.
Tmux #
Tmuxis una alternativa moderna a la pantalla GNU. Con Tmux, también puede crear una sesión y abrir varias ventanas dentro de esa sesión. Las sesiones de Tmux son persistentes, lo que significa que los programas que se ejecutan en Tmux continuarán ejecutándose incluso si cierra la terminal.
Rechazar #
disown
es un shell incorporado que elimina un trabajo de shell del control de trabajo de shell. A diferencia de nohup
, puedes usar disown
en los procesos en ejecución también.
Conclusión #
nohup
le permite evitar que los comandos finalicen cuando cierra la sesión o sale de la terminal.
Si tiene alguna pregunta o comentario, no dude en dejar un comentario.