def run config={}, &block
      @config.update(config).update(load_config)
      # @config = (config.empty?) ? load_config : config
      log "Starting #{name} in the foreground.."
      trap('TERM') { handle_exit }
      trap('INT')  { handle_exit }
      yield(self) if block_given?
      (respond_to?(:__start!)) ? __start! : perform(@config)
      # If this process doesn't loop or otherwise breaks out of 
      # the loop we still want to clean up after ourselves
      handle_exit
    end
def run config={}, &block
      @config.update(config).update(load_config)
      # @config = (config.empty?) ? load_config : config
      log "Starting #{name} in the foreground.."
      trap('TERM') { handle_exit }
      trap('INT')  { handle_exit }
      yield(self) if block_given?
      (respond_to?(:__start!)) ? __start! : perform(@config)
      # If this process doesn't loop or otherwise breaks out of 
      # the loop we still want to clean up after ourselves
      handle_exit
    end
Starts the Djinn in the foreground, which is often useful for
 testing or other noble pursuits.