@ -342,13 +342,21 @@ class Main:
sleep ( 1 )
def daemonize ( self ) :
grandfatherPid = os . getpid ( )
parentPid = None
try :
if os . fork ( ) :
# unlock
shared . thisapp . cleanup ( )
# wait until grandchild ready
while True :
sleep ( 1 )
os . _exit ( 0 )
except AttributeError :
# fork not implemented
pass
else :
parentPid = os . getpid ( )
shared . thisapp . lock ( ) # relock
os . umask ( 0 )
try :
@ -358,12 +366,17 @@ class Main:
pass
try :
if os . fork ( ) :
# unlock
shared . thisapp . cleanup ( )
# wait until child ready
while True :
sleep ( 1 )
os . _exit ( 0 )
except AttributeError :
# fork not implemented
pass
else :
shared . thisapp . lock ( True ) # relock and write pid
shared . thisapp . lock ( ) # relock
shared . thisapp . lockPid = None # indicate we're the final child
sys . stdout . flush ( )
sys . stderr . flush ( )
@ -374,6 +387,10 @@ class Main:
os . dup2 ( si . fileno ( ) , sys . stdin . fileno ( ) )
os . dup2 ( so . fileno ( ) , sys . stdout . fileno ( ) )
os . dup2 ( se . fileno ( ) , sys . stderr . fileno ( ) )
if parentPid :
# signal ready
os . kill ( parentPid , signal . SIGTERM )
os . kill ( grandfatherPid , signal . SIGTERM )
def setSignalHandler ( self ) :
signal . signal ( signal . SIGINT , helper_generic . signal_handler )