|  | @@ -36,6 +36,7 @@ _setproctitle = try_import('setproctitle')
 | 
											
												
													
														|  |  resource = try_import('resource')
 |  |  resource = try_import('resource')
 | 
											
												
													
														|  |  pwd = try_import('pwd')
 |  |  pwd = try_import('pwd')
 | 
											
												
													
														|  |  grp = try_import('grp')
 |  |  grp = try_import('grp')
 | 
											
												
													
														|  | 
 |  | +mputil = try_import('multiprocessing.util')
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  __all__ = ['EX_OK', 'EX_FAILURE', 'EX_UNAVAILABLE', 'EX_USAGE', 'SYSTEM',
 |  |  __all__ = ['EX_OK', 'EX_FAILURE', 'EX_UNAVAILABLE', 'EX_USAGE', 'SYSTEM',
 | 
											
												
													
														|  |             'IS_OSX', 'IS_WINDOWS', 'pyimplementation', 'LockFailed',
 |  |             'IS_OSX', 'IS_WINDOWS', 'pyimplementation', 'LockFailed',
 | 
											
										
											
												
													
														|  | @@ -294,11 +295,13 @@ class DaemonContext(object):
 | 
											
												
													
														|  |      _is_open = False
 |  |      _is_open = False
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      def __init__(self, pidfile=None, workdir=None, umask=None,
 |  |      def __init__(self, pidfile=None, workdir=None, umask=None,
 | 
											
												
													
														|  | -                 fake=False, after_chdir=None, **kwargs):
 |  | 
 | 
											
												
													
														|  | 
 |  | +                 fake=False, after_chdir=None, after_forkers=True,
 | 
											
												
													
														|  | 
 |  | +                 **kwargs):
 | 
											
												
													
														|  |          self.workdir = workdir or DAEMON_WORKDIR
 |  |          self.workdir = workdir or DAEMON_WORKDIR
 | 
											
												
													
														|  |          self.umask = DAEMON_UMASK if umask is None else umask
 |  |          self.umask = DAEMON_UMASK if umask is None else umask
 | 
											
												
													
														|  |          self.fake = fake
 |  |          self.fake = fake
 | 
											
												
													
														|  |          self.after_chdir = after_chdir
 |  |          self.after_chdir = after_chdir
 | 
											
												
													
														|  | 
 |  | +        self.after_forkers = after_forkers
 | 
											
												
													
														|  |          self.stdfds = (sys.stdin, sys.stdout, sys.stderr)
 |  |          self.stdfds = (sys.stdin, sys.stdout, sys.stderr)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      def redirect_to_null(self, fd):
 |  |      def redirect_to_null(self, fd):
 | 
											
										
											
												
													
														|  | @@ -321,6 +324,8 @@ class DaemonContext(object):
 | 
											
												
													
														|  |                  close_open_fds(self.stdfds)
 |  |                  close_open_fds(self.stdfds)
 | 
											
												
													
														|  |                  for fd in self.stdfds:
 |  |                  for fd in self.stdfds:
 | 
											
												
													
														|  |                      self.redirect_to_null(maybe_fileno(fd))
 |  |                      self.redirect_to_null(maybe_fileno(fd))
 | 
											
												
													
														|  | 
 |  | +                if self.after_forkers and mputil is not None:
 | 
											
												
													
														|  | 
 |  | +                    mputil._run_after_forkers()
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |              self._is_open = True
 |  |              self._is_open = True
 | 
											
												
													
														|  |      __enter__ = open
 |  |      __enter__ = open
 |