nohup es un comando POSIX que significa "no colgar". Su propósito es ejecutar un comando de modo que ignore la señal HUP (colgar) y, por lo tanto, no se detenga cuando el usuario cierre la sesión.
Desarrollador (es) | Varios desarrolladores comerciales y de código abierto |
---|---|
Sistema operativo | Unix , similar a Unix , IBM i |
Plataforma | Multiplataforma |
Tipo | Mando |
La salida que normalmente iría al terminal va a un archivo llamado nohup.out , si aún no ha sido redirigido.
Usar
El primero de los siguientes comandos inicia el programa abcd
en segundo plano de tal manera que el siguiente cierre de sesión no lo detiene.
$ nohup abcd y $ salir
Tenga en cuenta que estos métodos evitan que el proceso reciba una señal de "detención" al cerrar la sesión, pero si se reciben entradas / salidas para estos archivos de E / S estándar (stdin, stdout o stderr), todavía colgarán el terminal. [1] Consulte Superar el ahorcamiento , a continuación.
nohup se usa a menudo en combinación con el comando nice para ejecutar procesos con una prioridad más baja.
$ nohup nice abcd &
Implementaciones
Algunos shells (por ejemplo, bash ) proporcionan un shell incorporado que puede usarse para evitar que SIGHUP se envíe o se propague a trabajos existentes, incluso si no se iniciaron con nohup. En bash, esto se puede obtener usando disown -h job
; el uso de la misma función incorporada sin argumentos elimina el trabajo de la tabla de trabajos, lo que también implica que el trabajo no recibirá la señal. Antes de usarlo disown
en un trabajo activo, debe detenerse Ctrl-Z
y continuar en segundo plano con el bg
comando. [2] Otra opción de bash relevante es shopt huponexit
, que envía automáticamente la señal HUP a los trabajos cuando el shell sale normalmente. [3]
Las versiones AIX y Solaris de nohup tienen una -p
opción que modifica un proceso en ejecución para ignorar las señales SIGHUP futuras. A diferencia de la función disown
incorporada de bash descrita anteriormente , nohup -p
acepta ID de proceso. [4]
La El comando nohup también se ha trasladado al sistema operativo IBM i . [5]
Superar el ahorcamiento
Tenga en cuenta que los trabajos en segundo plano no se utilizan normalmente para evitar terminarlos cuando se cierra la sesión de una sesión SSH remota . Un problema diferente que surge a menudo en esta situación es que ssh se niega a cerrar la sesión ("cuelga"), ya que se niega a perder cualquier dato desde / hacia los trabajos en segundo plano. [6] [7] Este problema también se puede solucionar redirigiendo los tres flujos de E / S:
$ nohup ./myprogram> foo.out 2 > foo.err &
También tenga en cuenta que una sesión SSH de cierre no siempre envía una señal HUP a procesos dependientes, como cuando no se ha asignado un pseudo-terminal . [8]
Alternativas
- Un multiplexor de terminal puede ejecutar un comando en una sesión separada, separada de la terminal actual, lo que significa que si la sesión actual finaliza, la sesión separada y sus procesos asociados continúan ejecutándose. Luego, se puede volver a conectar a la sesión más adelante.
- Por ejemplo, la siguiente invocación de screen ejecutará somescript.sh en el fondo de una sesión separada:
$ pantalla -A -m -d -S somename ./somescript.sh &
- El comando disown se utiliza para eliminar trabajos de la tabla de trabajos o para marcar trabajos de modo que no se envíe una señal SIGHUP al finalizar la sesión.
Referencias
- ^ "Re: nohup / disown y cierre de sesión" . Zsh.org. 2005-02-07. Archivado desde el original el 18 de mayo de 2009 . Consultado el 10 de junio de 2009 .
- ^ Manual de referencia de Bash Archivado el 3 de diciembre de 2010 en la Wayback Machine . Gnu.org. Consultado el 13 de abril de 2015.
- ^ Manual de referencia de Bash Archivado el 3 de diciembre de 2010 en la Wayback Machine . Gnu.org. Consultado el 13 de abril de 2015.
- ^ IBM Knowledge Center Archivado el 15 de octubre de 2014 en Wayback Machine . 01.ibm.com (26 de marzo de 2015). Consultado el 13 de abril de 2015.
- ^ IBM . "IBM System i Versión 7.2 Programación Qshell" (PDF) . Consultado el 5 de septiembre de 2020 .
- ^ "Preguntas frecuentes sobre SSH" . Snailbook.com. Archivado desde el original el 22 de enero de 2009 . Consultado el 10 de junio de 2009 .
- ^ "Preguntas frecuentes sobre OpenSSH" . Openssh.com. 2005-09-20. Archivado desde el original el 10 de julio de 2009 . Consultado el 10 de junio de 2009 .
- ^ "Error 396 - procesos huérfanos sshd cuando no hay pty asignado" . Bugzilla.mindrot.org . Consultado el 10 de junio de 2009 .
enlaces externos
- nohup de las páginas de manual de Solaris