def __init__(self, wait_interval=<NUM_LIT>, graceful_shutdown_timeout=<NUM_LIT>):
if self._process_runner_already_created:<EOL><INDENT>raise RuntimeError("<STR_LIT>"<EOL>"<STR_LIT>")<EOL><DEDENT>ServiceManager._process_runner_already_created = True<EOL>super(ServiceManager, self).__init__()<EOL>self._services = collections.OrderedDict()<EOL>self._running_services = collections.defaultdict(dict)<EOL>self._forktimes = []<EOL>self._graceful_shutdown_timeout = graceful_shutdown_timeout<EOL>self._wait_interval = wait_interval<EOL>self._dead = threading.Event()<EOL>self._got_sig_chld = threading.Event()<EOL>self._got_sig_chld.set()<EOL>self._child_supervisor = None<EOL>self._hooks = {<EOL>'<STR_LIT>': [],<EOL>'<STR_LIT>': [],<EOL>'<STR_LIT>': [],<EOL>'<STR_LIT>': [],<EOL>}<EOL>_utils.setproctitle("<STR_LIT>" %<EOL>(_utils.get_process_name(), "<STR_LIT:U+0020>".join(sys.argv)))<EOL>try:<EOL><INDENT>os.setsid()<EOL><DEDENT>except (OSError, AttributeError):<EOL><INDENT>pass<EOL><DEDENT>self._death_detection_pipe = multiprocessing.Pipe(duplex=False)<EOL>signal.signal(signal.SIGINT, self._fast_exit)<EOL>if os.name == '<STR_LIT>':<EOL><INDENT>signal.signal(signal.SIGCHLD, self._signal_catcher)<EOL><DEDENT>
Creates the ServiceManager object

        :param wait_interval: time between each new process spawn
        :type wait_interval: float