'Start the process.
@raise pmon.FatalProcessLaunch: if process cannot be started and it
is not likely to ever succeed'

def start(self):

    super(LocalProcess, self).start()
    try:
        self.lock.acquire()
        self.started = self.stopped = False
        full_env = self.env
        try:
            (logfileout, logfileerr) = self._configure_logging()
        except Exception as e:
            printerrlog(('[%s]    ERROR:    unable    to    configure    logging    [%s]' % (self.name, str(e))))
            (logfileout, logfileerr) = (subprocess.PIPE, subprocess.PIPE)
        if (self.cwd == 'node'):
            cwd = os.path.dirname(self.args[0])
        elif (self.cwd == 'cwd'):
            cwd = os.getcwd()
        elif (self.cwd == 'ros-root'):
            cwd = get_ros_root()
        else:
            cwd = rospkg.get_ros_home()
        if (not os.path.exists(cwd)):
            try:
                os.makedirs(cwd)
            except OSError:
                pass
        try:
            self.popen = subprocess.Popen(self.args, cwd=cwd, stdout=logfileout, stderr=logfileerr, env=full_env, close_fds=True, preexec_fn=os.setsid)
        except OSError as e:
            self.started = True
            if (e.errno == 8):
                raise pmon.FatalProcessLaunch(("Unable    to    launch    [%s].    \nIf    it    is    a    script,    you    may    be    missing    a    '#!'    declaration    at    the    top." % self.name))
            elif (e.errno == 2):
                raise pmon.FatalProcessLaunch(("Roslaunch    got    a    '%s'    error    while    attempting    to    run:\n\n%s\n\nPlease    make    sure    that    all    the    executables    in    this    command    exist    and    have\nexecutable    permission.    This    is    often    caused    by    a    bad    launch-prefix." % (msg, '    '.join(self.args))))
            else:
                raise pmon.FatalProcessLaunch(('unable    to    launch    [%s]:    %s' % ('    '.join(self.args), msg)))
        self.started = True
        poll_result = self.popen.poll()
        if ((poll_result is None) or (poll_result == 0)):
            self.pid = self.popen.pid
            printlog_bold(('process[%s]:    started    with    pid    [%s]' % (self.name, self.pid)))
            return True
        else:
            printerrlog(('failed    to    start    local    process:    %s' % '    '.join(self.args)))
            return False
    finally:
        self.lock.release()
