Wie funktioniert nohup?


8

Mein Verständnis ist, dass Sie, um ein Prozesssignal wie zu blockieren SIGHUP, dies innerhalb des Prozesses tun müssen, an den das Signal gesendet wird. Eine Unix-Shell wie bashkann jedoch einen untergeordneten Prozess erzeugen und das HUPSignal für das untergeordnete Element mithilfe des nohupBefehls aus dem übergeordneten Prozess blockieren . Wie funktioniert das? Hat nohupblockieren das Signal und dann das Kind Prozess exec ohne Forking? Nur so kann ich mir vorstellen.

Antworten:


7

Sie können auf den Quellcode einer Implementierung einen Blick darauf werfen nohup, wie zB GNU - coreutilsVersion . Es gibt eine Menge Setups, einige davon für Internationalisierungszwecke, der Rest für die verschiedenen Umleitungsoptionen. dann passiert das eigentliche "nohupping":

  signal (SIGHUP, SIG_IGN);

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

Wie Sie vermuten, wird der Prozess so eingerichtet, dass das HUP-Signal ignoriert wird, und dann execder angeforderte Befehl.


-2

Durch die Verwendung wird nohupeinfach die PPID des erzeugten Prozesses in 1 (init) geändert, sodass es sich beim Beenden der Shell nicht mehr um einen untergeordneten Prozess dieser Shell handelt und daher kein HUP erhält.

EDIT: Sollte mehr nachdenken, bevor ich manchmal poste. Lass es hier, um mich an meine Schande zu erinnern :-(

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.