¿Cómo funciona nohup?

8

Según tengo entendido, para bloquear una señal de proceso como SIGHUP, deberías hacerlo desde el proceso al que se envía la señal. Sin embargo, un shell de Unix como bashpuede generar un proceso hijo y bloquear la HUPseñal para el niño desde dentro del padre, utilizando el nohupcomando. ¿Como funciona esto? ¿ nohupBloquea la señal y luego ejecuta el proceso hijo sin bifurcación? Esa es la única forma en que puedo pensar.

usuario628544
fuente

Respuestas:

7

Puede echar un vistazo al código fuente de una implementación de nohup, por ejemplo , la coreutilsversión de GNU . Hay un montón de configuraciones, algunas para fines de internacionalización, el resto para manejar las diversas opciones de redireccionamiento; entonces ocurre el "nohupping" real:

  signal (SIGHUP, SIG_IGN);

  char **cmd = argv + optind;
  execvp (*cmd, cmd);

Como supones, esto configura el proceso para ignorar la señal HUP, luego execel comando solicitado.

Stephen Kitt
fuente
-2

El acto de usar nohupsimplemente cambia el PPID del proceso generado a 1 (init) para que cuando el shell salga, ya no sea un proceso hijo de ese shell y, por lo tanto, no reciba un HUP.

EDITAR: Debería pensar más antes de publicar a veces. Dejándolo aquí para recordarme mi vergüenza :-(

No creyente
fuente