docs: def run_process(self, analysis, action_name, message='__nomessagetoken__'):
          """Executes an process in the analysis with the given message.
  
          It also handles the start and stop signals in case a process_id
          is given.
          """
  
          if action_name == 'connect':
              analysis.on_connect(self.executable, self.zmq_publish)
  
          while not analysis.zmq_handshake:
              yield tornado.gen.sleep(0.1)
  
          log.debug('sending action {}'.format(action_name))
          analysis.zmq_send({'signal': action_name, 'load': message})
  
          if action_name == 'disconnected':
              # Give kernel time to process disconnected message.
              yield tornado.gen.sleep(0.1)
              analysis.on_disconnected()