From 07b50730a2b6d60316890b82138bd794f98f8f55 Mon Sep 17 00:00:00 2001 From: Damien Churchill Date: Tue, 13 Oct 2009 15:20:45 +0000 Subject: [PATCH] improve the forking code --- deluge/ui/web/web.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/deluge/ui/web/web.py b/deluge/ui/web/web.py index b5fd20815..1ebb3c065 100644 --- a/deluge/ui/web/web.py +++ b/deluge/ui/web/web.py @@ -77,10 +77,26 @@ class Web(_UI): def start(self): super(Web, self).start() - if self.options.fork: + import deluge.common + # Steps taken from http://www.faqs.org/faqs/unix-faq/programmer/faq/ + # Section 1.7 + if self.options.fork and not deluge.common.windows_check(): + # fork() so the parent can exit, returns control to the command line + # or shell invoking the program. if os.fork(): exit(0) + # setsid() to become a process group and session group leader. + os.setsid() + + # fork() again so the parent, (the session group leader), can exit. + if os.fork(): + exit(0) + + # chdir() to esnure that our process doesn't keep any directory in + # use that may prevent a filesystem unmount. + import deluge.configmanager + os.chdir(deluge.configmanager.get_config_dir()) import server self.__server = server.DelugeWeb()