Warum dämonisieren wir Prozesse? [geschlossen]

7

Ich habe gelesen und verstanden, wie Sie einen Daemon-Prozess erstellen, aber nach allem, was ich gelesen habe, habe ich nie wirklich verstanden, warum dies getan werden muss.

Ich habe gelesen, dass wir die Fork - Setsid - Fork machen, um den Prozess zu vermeiden, die Kontrolle über ein Terminal zu erlangen, aber was bedeutet das? Wenn ich ein Programm im Hintergrund mit & (z. B. './script &') starte, unterscheidet sich die Ausführung dieses Prozesses von der normalen Ausführung eines Programms, das sich selbst in einen Daemon verwandelt?

Bedeutet dies einfach, dass beim Abmelden der Hintergrundprozess gestoppt wird und der Dämon weiter ausgeführt wird? Ich habe wirklich Probleme, die Sache mit der Kontrolle über ein Terminal zu verstehen.

Der Grund, warum mich das stört, ist, dass ich an einem eingebetteten RPi auf einem Roboter arbeite und daher Programme beim Booten starten muss. Momentan starte ich sie gerade von rc.local mit einem Befehl wie diesem su user -c 'python /home/user/launcher.py &' &. Ich hatte noch nie ein Problem mit dem Programm, das beim Booten gestartet wurde (ich kann sogar sehen, wie der Prozess ps -ebeim SSHing zum RPi verwendet wird), aber ich würde gerne wissen, ob ein Risiko besteht oder ob es sich um eine schlechte Praxis handelt.

lesurp
quelle

Antworten:

5

Das ist mehr als eine Frage, jede könnte lange Antworten haben. Kurz

  • Wenn ich ein Programm im Hintergrund mit & (z. B. './script &') starte, unterscheidet sich die Ausführung dieses Prozesses von der normalen Ausführung eines Programms, das sich selbst in einen Daemon verwandelt?

    Wenn Sie ein Programm im Hintergrund ausführen, wird es nicht mehr direkt vom Terminal gesteuert (Sie können es nicht einfach ^C), aber es kann trotzdem auf das Terminal schreiben und Ihre Arbeit beeinträchtigen. In der Regel trennt sich ein Dämon (zusätzlich zum Gabeln) vom Terminal und seine Ausgabe / sein Fehler wird in Dateien umgeleitet.

  • Bedeutet dies einfach, dass beim Abmelden der Hintergrundprozess gestoppt wird und der Dämon weiter ausgeführt wird?

    Der Hintergrundprozess könnte mit geschützt werden, nohupaber wenn seine Ausgabe nicht umgeleitet würde, würde das Schließen des Terminals das Schreiben verhindern und einen Fehler erzeugen, der ihn wahrscheinlich stoppen würde.

  • Ich würde gerne wissen, ob es ein Risiko gibt / ob es eine schlechte Praxis ist.

    Neben dem Problem, die Ausgabe des Programms (und Fehlermeldungen) zu verfolgen, gibt es das Problem, es neu zu starten, wenn es stirbt. Ein Dienstskript passt in die Art und Weise, wie die anderen Dienste auf dem System entworfen wurden, und bietet eine mehr oder weniger standardmäßige Möglichkeit zur Steuerung des Dämons.

Thomas Dickey
quelle
Vielen Dank ! Das war klar. Jetzt merke ich, dass ich nicht wirklich verstehe, wie rc.local funktioniert, da ich Programme daraus starten kann und sie gut funktionieren, obwohl sie eine Ausgabe haben. Werden rc.locals stderr / stdout fds standardmäßig nach / dev / null umgeleitet?
Lesurp
Das wird wahrscheinlich auf der Systemkonsole angezeigt, z. B. /dev/tty1(einige Systeme unterscheiden sich).
Thomas Dickey