Erläuterung zu Signalen (Sighup), Jobs und dem steuernden Terminal

Erläuterung zu Signalen (Sighup), Jobs und dem steuernden Terminal

Ich habe also zwei verschiedene Perspektiven gelesen und versuche herauszufinden, welche richtig ist.

1) Einige Online-Quellen sagen, dass Signale, die vom Steuerterminal gesendet werden, NUR an die Vordergrundprozessgruppe gesendet werden. Das heißt, wenn Sie möchten, dass ein Prozess nach dem Abmelden im Hintergrund weiterläuft, reicht es aus, den Job einfach anzuhalten (Strg-Z) und im Hintergrund fortzusetzen (bg). Dann können Sie sich abmelden und er wird weiter ausgeführt, da SIGHUP nur an den Vordergrundjob gesendet wird.

Sehen:http://blog.nelhage.com/2010/01/a-brief-introduction-to-termios-signaling-and-job-control/

...Wenn außerdem ein signalgenerierendes Zeichen von einem Terminal gelesen wird, generiert es das entsprechende Signal an die Vordergrundprozessgruppe....

2) Andere Quellen behaupten, Sie müssten den Befehl „nohup“ verwenden, wenn das Programm ausgeführt wird, oder, falls das nicht klappt, während der Ausführung einen Befehl „disown“ eingeben, um es aus der Jobtabelle zu entfernen, die auf SIGHUP wartet. Sie sagen, wenn Sie dies beim Abmelden nicht tun, wird Ihr Prozess auch beendet, selbst wenn er in einer Hintergrundprozessgruppe ausgeführt wird.

Zum Beispiel:http://docstore.mik.ua/orelly/unix3/upt/ch23_11.htm

...Wenn ich mich trotzdem abmelde, sendet die Shell meinem Hintergrundjob ein HUP-Signal...

Bei meinen eigenen Experimenten mit Ubuntu Linux scheint 1) richtig zu sein. Ich habe den Befehl „sleep 20 &“ ausgeführt, mich dann abgemeldet, wieder angemeldet und „ps aux“ gedrückt. Tatsächlich wurde der Sleep-Befehl immer noch ausgeführt.

Warum also glauben so viele Leute anscheinend Nummer 2? Und wenn man nur einen Job im Hintergrund platzieren muss, damit er weiterläuft, warum verwenden dann so viele Leute „nohup“ und „disown“?

verwandte Informationen