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.

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.


-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 :-(

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.