Ich habe bereits die Manpage der Pidfilefunktionsfamilie gelesen. Aber ich verstehe es nicht wirklich. Was ist die richtige Verwendung? Gibt es ein ausführlicheres Beispiel? Ich denke ich verstehe pidfile_open
. Aber wann sollte ich pidfile_write
und prdfile_close
aufrufen? Aus welchem Prozess? Eltern oder Kind? Welche Parameter muss ich an diese Funktionen übergeben? Mir fehlen wahrscheinlich einige * nix-Grundlagen.
Aktualisierung:
Unten sehen Sie das Beispiel von man pidfile. Warum verzweigen sie sich zweimal? Warum pidfile_close? Wenn ich pidfile_close aufruft, kann ich einen anderen Daemon starten. Ist das nicht unerwünscht?
%Vor%Das Problem ist, dass Sie eine Fehlermeldung ausgeben wollen, bevor der Dämon erzeugt wird und dass Sie die PID-Datei kennen, nachdem der Dämon erzeugt wurde.
Sie tun also normalerweise pidfile_open vor dem fork, was Ihnen die Möglichkeit gibt, eine Fehlermeldung zu geben. Nachdem Sie gegabelt haben, kennen Sie die PID-Datei und Sie können pidfile_write tun.
Sie machen pidfile_open (3), bevor Sie in den Hintergrund gehen, damit Sie Probleme sofort melden können. Sie schreiben PID noch nicht, weil sich Ihre PID nach dem Daemon (3) ändert. pidfile_open (3) sperrt nur die PID-Datei. Nach dem Daemon (3) kannst du pidfile_write (3) aufrufen, da du nun deine letzte PID hast (daemon (3) gibt intern Forks aus). Im Hauptprozess können Sie pidfile_close (3) nicht aufrufen, da dies die ganze Idee ist - indem Sie die Pidfile offen und gesperrt halten, lassen Sie andere wissen, dass Sie noch am Leben sind. Die zweite Gabel ist völlig optional. Es veranschaulicht gängiges Verhalten, dass Daemons Child / Worker-Prozesse hervorbringen. Wenn Sie sie nicht benutzen, brauchen Sie diese Gabel nicht (). Mit diesem fork () soll nur angezeigt werden, dass in einem solchen Worker-Prozess die PID-Datei geschlossen werden sollte. Sie wird also nur vom Hauptprozess und nicht vom Kind geöffnet und gesperrt.