whole_func_string: function (pluginName, callback) {
      var config = configHelpers.getConfig();
  
      if (config.plugins[pluginName] === undefined) {
        logger.error('Plugin ' + pluginName + ' not installed!');
  
      } else if (pluginHelpers.loadedPlugins[pluginName] === undefined) {
        logger.error('Plugin ' + pluginName + ' not loaded!');
  
      } else {
        var options = config.plugins[pluginName];
  
        try {
          var plugin = pluginHelpers.loadedPlugins[pluginName];
          delete pluginHelpers.loadedPlugins[pluginName];
          nodeHelpers.clearRequireCache(configHelpers.modulePath(options.name));
  
          if (plugin.onExit !== undefined) {
  
            return plugin.onExit(options, config, function (err) {
  
              if (err) {
                logger.raw(err);
                logger.info('\t' + symbols.err + '\t' +
                            options.displayName + '');
  
              } else {
                logger.info('\t' + symbols.ok + '\t' +
                            options.displayName + '');
              }
  
              delete pluginHelpers.startedPlugins[pluginName];
              nodeHelpers.invoke(callback, err);
            });
  
          } else {
            delete pluginHelpers.startedPlugins[pluginName];
            logger.info('\t' + symbols.ok + '\t' +
                        options.displayName + '');
          }
  
        } catch(err) {
          logger.raw(err);
          logger.error('Plugin ' + options.displayName +
                       ' failed for termination.');
          return nodeHelpers.invoke(callback, err);
        }
      }
      return nodeHelpers.invoke(callback);
    }
func_code_string: function (pluginName, callback) {
      var config = configHelpers.getConfig();
  
      if (config.plugins[pluginName] === undefined) {
        logger.error('Plugin ' + pluginName + ' not installed!');
  
      } else if (pluginHelpers.loadedPlugins[pluginName] === undefined) {
        logger.error('Plugin ' + pluginName + ' not loaded!');
  
      } else {
        var options = config.plugins[pluginName];
  
        try {
          var plugin = pluginHelpers.loadedPlugins[pluginName];
          delete pluginHelpers.loadedPlugins[pluginName];
          nodeHelpers.clearRequireCache(configHelpers.modulePath(options.name));
  
          if (plugin.onExit !== undefined) {
  
            return plugin.onExit(options, config, function (err) {
  
              if (err) {
                logger.raw(err);
                logger.info('\t' + symbols.err + '\t' +
                            options.displayName + '');
  
              } else {
                logger.info('\t' + symbols.ok + '\t' +
                            options.displayName + '');
              }
  
              delete pluginHelpers.startedPlugins[pluginName];
              nodeHelpers.invoke(callback, err);
            });
  
          } else {
            delete pluginHelpers.startedPlugins[pluginName];
            logger.info('\t' + symbols.ok + '\t' +
                        options.displayName + '');
          }
  
        } catch(err) {
          logger.raw(err);
          logger.error('Plugin ' + options.displayName +
                       ' failed for termination.');
          return nodeHelpers.invoke(callback, err);
        }
      }
      return nodeHelpers.invoke(callback);
    }
func_documentation_string: Stop given plugin (unload it form cache and run its exit handleR).
  
  @param pluginName The plugin name to start.
  @param callback Termination.