http://linuxg.net/how-to-transform-a-process-into-a-daemon-in-linux-unix/ gibt ein Beispiel für die Dämonisierung eines Prozesses in bash:
$ nohup firefox& &> /dev/null
Wenn ich richtig bin, ist der Befehl der gleiche wie "nohup und Hintergrund eines Prozesses". Aber ist ein Daemon nicht mehr als ein Nohupped- und Hintergrundprozess?
Welche Schritte fehlen hier, um einen Prozess zu dämonisieren?
Ist es beispielsweise nicht erforderlich, den übergeordneten Prozess zu ändern, wenn ein Prozess dämonisiert wird? Wenn ja, wie machst du das in Bash? Ich versuche immer noch, eine verwandte Antwort zu verstehen: https://unix.stackexchange.com/a/177361/674 .
Welche anderen Schritte und Bedingungen?
Siehe meine verwandte Frage https://stackoverflow.com/q/35705451/156458
start-stop-daemon
Debian an. Ich werde hier einen verwandten Thread von Stack Overflow Stackoverflow.com/questions/16139940/… hinterlassen, der interessanter ist als die rohe ManpageAntworten:
Aus dem Wikipedia-Artikel über Daemon :
In einer Unix-Umgebung ist der übergeordnete Prozess eines Daemons häufig, aber nicht immer, der Init-Prozess. Ein Daemon wird normalerweise entweder durch einen Prozess erstellt, der einen untergeordneten Prozess verzweigt und dann sofort beendet, wodurch init den untergeordneten Prozess übernimmt, oder durch den init-Prozess, der den Daemon direkt startet. Darüber hinaus muss ein Daemon, der durch Forken und Beenden gestartet wird, normalerweise andere Vorgänge ausführen, z. B. das Trennen des Prozesses von einem steuernden Terminal (tty). Solche Prozeduren werden häufig in verschiedenen Komfortroutinen wie Daemon (3) in Unix implementiert .
Lesen Sie die Manpage der
daemon
Funktion.Das Ausführen eines Hintergrundbefehls über eine Shell, die sofort beendet wird, führt dazu, dass die PPID des Prozesses zu 1 wird. Einfach zu testen:
Wie Sie sehen können, gehört der Prozess PID 1, ist aber immer noch einem TTY zugeordnet. Wenn ich mich von dieser Login-Shell abmelde, mich
ps
erneut anmelde und es erneut mache , wird das TTY?
.Lesen Sie hier, warum es wichtig ist, sich von TTY zu lösen .
Verwenden von
setsid
(Teil vonutil-linux
):Ich denke, Sie müssen nicht einmal stdin, stdout und stderr umleiten.
quelle
bash -c
Wrapper verwenden, ist dem Prozess kein TTY zugeordnet. Es ist wirklich so, wie er es demonstriert hat.echo "outer tty: $(tty)"; ls -la $(dirname $(tty)); bash -c 'echo "inner tty: $(tty)"; ls -la $(dirname $(tty));'
werden Sie feststellen, dass es für beide genau das gleiche TTY ist, aber das demonstrierte Verhalten beim Abrufen eines TTY von tritt?
immer noch auf, obwohl Sie sich nie von der Shell abmelden oder das TTY schließen.Ein Deamon ist nach seinem Namen nichts anderes als ein Programm, das ausgeführt wird , bis 1. das System heruntergefahren wird; 2. es wird aufgefordert aufzuhören. Davon abgesehen hat es keine magische Bedeutung.
Unter diesen Umständen kann das Ausführen eines Bash-Skripts im Hintergrund mit nohup als Daemon-Prozess klassifiziert werden.
Was erwarten Sie zu finden und nicht zu finden? Wenn Sie Probleme haben, geben Sie diese bitte mit Beispielcode und Beispieldatensegmenten an, um weitere Hilfe anzufordern. Ihre Frage ist derzeit zu weit gefasst / allgemein.
quelle