¿Cuándo debo usar "nohup" y cuándo debo usar "&"?

16

Nunca sé cuándo es el mejor momento para usar nohup y el & al final del comando.

Alex
fuente

Respuestas:

20

Nohup hace que un programa ignore la señal HUP, lo que permite que se ejecute después de que el terminal actual esté cerrado / el usuario haya cerrado sesión. Nohup no envía el programa a segundo plano.
& al final del comando está relacionado con el control de trabajo de shell, lo que permite al usuario continuar trabajando en la sesión de shell actual.
Por lo general, nohup y & se combinan para iniciar el programa que se ejecuta después del cierre de sesión del usuario y permite continuar el trabajo en la sesión de shell actual.

Kristaps
fuente
13

Normalmente, &cuando quiero ejecutar en segundo plano, utilizo un comando que no tardará mucho en ejecutarse, o uno en el que realmente no me importará si el programa se termina si me desconecto inesperadamente de una sesión.

xcalc &
rdesktop 1.2.3.4 & 
./this_only_takes_a_few_seconds_but_i_want_my_shell_back.py &

Cuando trabajo a través de una VPN o una conexión remota poco fiable, tiendo a usar nohuppara ejecutar cualquier cosa que tarde un tiempo en ejecutarse. Al ejecutar importaciones de datos grandes en un host remoto, por ejemplo, es posible que desee usar nohuppara asegurarse de que desconectarse no tendrá que comenzar de nuevo cuando se vuelva a conectar.

nohup ./do_data_load.py mydatafile.txt &

También se usa cuando un desarrollador no damoniza adecuadamente un servicio, por lo que debe usarlo nohuppara asegurarse de que no se elimine cuando cierre la sesión.

nohup sillyd &

Si olvida usarlo nohupcuando ejecuta algo como los dos últimos ejemplos, puede usar bash o zsh incorporado disownpara el mismo efecto.

$ sillyd &
[1] 12345            # Whoops!
$ disown %1

Es bastante raro usarlo nohupsin él &, ya que no puedes volver a conectarte a la sesión de nohup'd si estás desconectado. Esto prácticamente elimina su utilidad para los comandos interactivos. En el caso de que tenga un comando interactivo que desee conservar durante las sesiones o evitar desconexiones complicadas, puede usarlo screen. El poder de fuego de una screensesión totalmente armada y operativa está más allá del alcance de esta publicación, por lo que debe verificarlo con más detalle .

Cakemox
fuente
Encuentro que tmux es más fácil de configurar y usar que la pantalla. Además, licencia BSD.
Kristaps
1
También puede usar byobuque agrega algunas características agradables a la pantalla. Está disponible en la mayoría de los repositorios aptos y en los repositorios EPEL para Red Hat.
James
0

nohup: cerrar sesión usuario actual, el proceso no se detendrá

&: con este símbolo, no habrá salida en el terminal actual, el proceso se ejecutará en segundo plano

anónimo
fuente
44
todavía hay salida, ya que no elimina la salida estándar y las secuencias de error. tienes que usar la redirección de flujo, como este comando (en bash)> / dev / null 2> 1
Kristaps