Linux: daemon mit double-fork

14/12/2007 - 10:10 von Jens Nitzsche | Report spam
Hi all,

laut vieler Empfehlungen im Netz erzeuge ich einen Daemon mit 2 x os.fork():

snip

pid = os.fork()
if pid > 0:
sys.exit(0) # kill parent

# child 1
os.chdir("/")
os.setsid()
os.umask(0)

pid = os.fork()
if pid > 0:
print "Daemon PID %d" % pid
sys.exit(0) # kill child 1


# child 2: start the daemon main loop
main()

snip

Das klappt auch gut, d.h. ich kriege einen Prozess mit PPID 1 im
Hintergrund. In main() leite ich alle Streams per
sys.stdout/sys.stderr/sys.stdin nach /dev/null. In main() wird in
Intervallen ein File mit der aktuellen Zeit befüllt. Jetzt das Problem:
Nachdem ich das Daemon-Skript ausgeführt habe, möchte ich die
Linux-Shell verlassen, und zwar einfach mit:

$ exit

Nur làsst mich die Shell nicht raus! Erst, wenn ich den Daemon kille.
Mir schwebt etwas vor, wie

$ rsh maschine1 start_daemon.py

und weiter zu maschine2 etc. Nur endet das rsh leider nicht.

Hat jemand eine Idee?

Und Nebenschauplatz: Warum das os.fork() eigentlich 2 mal?

Gruß,

Jens
 

Lesen sie die antworten

#1 Diez B. Roggisch
14/12/2007 - 10:25 | Warnen spam
Jens Nitzsche schrieb:
Hi all,

laut vieler Empfehlungen im Netz erzeuge ich einen Daemon mit 2 x
os.fork():

snip

pid = os.fork()
if pid > 0:
sys.exit(0) # kill parent

# child 1
os.chdir("/")
os.setsid()
os.umask(0)

pid = os.fork()
if pid > 0:
print "Daemon PID %d" % pid
sys.exit(0) # kill child 1


# child 2: start the daemon main loop
main()

snip

Das klappt auch gut, d.h. ich kriege einen Prozess mit PPID 1 im
Hintergrund. In main() leite ich alle Streams per
sys.stdout/sys.stderr/sys.stdin nach /dev/null. In main() wird in
Intervallen ein File mit der aktuellen Zeit befüllt. Jetzt das Problem:
Nachdem ich das Daemon-Skript ausgeführt habe, möchte ich die
Linux-Shell verlassen, und zwar einfach mit:

$ exit

Nur làsst mich die Shell nicht raus! Erst, wenn ich den Daemon kille.
Mir schwebt etwas vor, wie

$ rsh maschine1 start_daemon.py

und weiter zu maschine2 etc. Nur endet das rsh leider nicht.

Hat jemand eine Idee?



http://aspn.activestate.com/ASPN/Co...cipe/66012

Vor allem auch mal die Kommentare lesen.

Diez

Ähnliche fragen