docs: function shutdownAction(params) {
          logger.log('debug', 'M|shutdownAction|params=%j', params, meta);
          var forcefull = params.forcefull ? true : false;
          var action = forcefull ? 'stop' : 'shutdown';
          
          // 1) Make sure the Engine is in the RUNNING state before asking all the
          //    workers to disconnect.
          if (state !== states.running && state !== states.error) {
              logger.log('warn', 'M|shutdownAction|ERROR|REJECT');
              params.deferred.reject(new Error('Unable to ' + action + ' workers. Invalid state ' + states.toString(state) + '. Expected running or error'));
              return null;
          }
          
          // 2) Changing state to "Stopping" and use the monitorAllWorkerHelper function to 
          //    Queue all the workers, to monitor their shutting down progress.
          nextState(states.stopping);
          eachWorker(function(worker) {
              worker.send({
                  "action"     : "stop",
                  "id"         : worker.id,
                  "origin"     : meta.module,
                  "methodArgs" : [forcefull]
              });
          });
          var promises = monitorAllWorkerHelper(action, forcefull ? savedConfig.stopTimeoutInMs : savedConfig.shutdownTimeoutInMs);
          Q.all(promises).then(function (object) {
              logger.log('debug', 'M|%sAction|all|resolved|object=%j', action, object, meta);
              actionCompleted("shutdown", states.stopped, true, 'All workers shutdown', params);                        
          }).fail(function (object) {
              logger.log('debug', 'M|%sAction|all|rejected|object=%j', action, object, meta);
              actionCompleted("shutdown", states.error, false, 'Unable to stop workers', params);                        
          }).done();
          
          // 3) Ask nicely all the worker to stop accepting connection and exit.
          if (forcefull) {
              eachWorker(function (worker) {
                  process.kill(worker.process.pid, 'SIGHUP');
              });
          } else {
              cluster.disconnect(function () {
                  logger.log('debug', 'M|%s|disconnected|ALL-WORKERS-ARE-DEAD', action, meta);
              });
          }
          
          // 4) Return null, to inform the ActionQueue that this action should not
          //    be reinstered into the queue.
          return null;
      }