Comment fonctionne nohup?

8

Je crois comprendre que pour bloquer un signal de processus comme SIGHUP, vous devez le faire à partir du processus auquel le signal est envoyé. Pourtant, un shell Unix comme bashpeut engendrer un processus enfant et bloquer le HUPsignal pour l'enfant depuis le parent, en utilisant la nohupcommande. Comment cela marche-t-il? Bloque nohuple signal et exécute ensuite le processus enfant sans bifurquer? C'est la seule façon dont je peux penser.

user628544
la source

Réponses:

7

Vous pouvez jeter un œil au code source d'une implémentation de nohup, par exemple la coreutilsversion de GNU . Il y a une tonne de configuration, certaines à des fins d'internationalisation, le reste pour gérer les différentes options de redirection; alors le "nohupping" se produit:

  signal (SIGHUP, SIG_IGN);

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

Comme vous le supposez, cela configure le processus pour ignorer le signal HUP, puis execla commande demandée.

Stephen Kitt
la source
-2

L'acte d'utiliser nohupchange simplement le PPID du processus généré en 1 (init) de sorte que lorsque le shell se termine, il ne s'agit plus d'un processus enfant de ce shell et donc ne reçoit pas de HUP.

EDIT: Devrait réfléchir plus avant de poster parfois. Le laisser ici pour me rappeler ma honte :-(

Incroyant
la source