Comment fonctionne nohup?

Je crois comprendre que pour bloquer un signal de process comme SIGHUP , il faudrait le faire depuis le process auquel le signal est envoyé. Cependant, un shell Unix comme bash peut engendrer un process enfant et bloquer le signal HUP pour l'enfant à partir du parent, en utilisant la command nohup . Comment cela marche-t-il? Est-ce que nohup bloque le signal et exécute le process fils sans forçage? C'est la seule façon dont je peux penser.

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

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

Comme vous le supposez, cela règle le process pour ignorer le signal HUP, puis exec la command demandée.

L'utilisation de nohup change simplement le PPID du process engendré en 1 (init) de sorte que lorsque le shell sort, ce n'est plus un process enfant de ce shell et donc ne reçoit pas de HUP.

EDIT: Devrait penser plus avant de postr parfois. Laisser ici pour me callbacker ma honte 🙁