code: def run_services(config, *services, **kwargs):
      
      kill_on_exit = kwargs.pop('kill_on_exit', False)
  
      runner = ServiceRunner(config)
      for service in services:
          runner.add_service(service)
  
      runner.start()
  
      yield runner
  
      if kill_on_exit:
          runner.kill()
      else:
          runner.stop()
docs: Serves a number of services for a contextual block.
      The caller can specify a number of service classes then serve them either
      stopping (default) or killing them on exiting the contextual block.
  
  
      Example::
  
          with run_services(config, Foobar, Spam) as runner:
              # interact with services and stop them on exiting the block
  
          # services stopped
  
  
      Additional configuration available to :class:``ServiceRunner`` instances
      can be specified through keyword arguments::
  
          with run_services(config, Foobar, Spam, kill_on_exit=True):
              # interact with services
  
          # services killed
  
      :Parameters:
          config : dict
              Configuration to instantiate the service containers with
          services : service definitions
              Services to be served for the contextual block
          kill_on_exit : bool (default=False)
              If ``True``, run ``kill()`` on the service containers when exiting
              the contextual block. Otherwise ``stop()`` will be called on the
              service containers on exiting the block.
  
      :Returns: The configured :class:`ServiceRunner` instance