Ein Hintergrundprozess - python2.7 <file>.py
mit dem &
Signal ausgeführt - ist nicht dasselbe wie ein echter Daemon-Prozess.
Ein echter Dämon-Prozess:
- Wird im Hintergrund ausgeführt. Dies passiert auch, wenn Sie
&
verwenden und die Ähnlichkeit endet.
- Befindet sich nicht in derselben Prozessgruppe wie das Terminal. Wenn das Terminal geschlossen wird, stirbt der Daemon auch nicht. Dies geschieht nicht mit
&
- der Prozess bleibt gleich, es wird einfach in den Hintergrund verschoben.
- Korrekt schließt alle geerbten Dateideskriptoren (einschließlich Eingabe, Ausgabe usw.), so dass nichts zurück an den übergeordneten bindet. Auch dies passiert nicht mit
&
- es wird immer noch auf das Terminal schreiben.
- Sollte nur idealerweise von SIGKILL getötet werden, nicht SIGHUP. Wenn Sie
&
ausführen, kann Ihr Prozess mit SIGHUP beendet werden.
All dies ist jedoch Pedanterie. Wenige Aufgaben erfordern wirklich, dass Sie zu dem Extrem gehen, das diese Eigenschaften erfordern - eine Hintergrundaufgabe, die in einem neuen Terminal unter Verwendung von screen
erzeugt wird, kann normalerweise den gleichen Job erledigen, wenn auch weniger effizient, und Sie können auch einen Daemon nennen lang andauernde Hintergrundaufgabe. Der einzige wirkliche Unterschied zwischen , und einem echten Daemon ist, dass letzterer einfach versucht, alle möglichen Wege des Todes zu vermeiden.
Der Code, den Sie sahen, gab einfach den aktuellen Prozess frei. Im Wesentlichen klont es den aktuellen Prozess, tötet seinen Elternteil und "handelt im Hintergrund", indem er einfach ein separater Prozess ist, der die aktuelle Ausführung nicht blockiert - ein bisschen ein hässlicher Hack, wenn Sie mich fragen, aber es funktioniert.
Siehe [Was ist der Unterschied zwischen der Ausführung eines Programms als Daemon und Forking in den Hintergrund mit '&'?] (Http://unix.stackexchange.com/questions/56495/whats-the-difference-between-running) -a-Programm-als-Daemon-und-Forking-It-in) –