code: function spawn() {
      startInterval();
      var args = Array.prototype.slice.call(arguments);
      if (currentCount < limitCount) {
          currentCount++;
          if (monitorCallback) {
              monitorCallback("start", remainedTasks);
          }
          return new Promise(function (resolved) {
              var process = originalSpawn.apply(null, args);
              process.on("close", function (code) {
                  if (monitorCallback) {
                      monitorCallback("close", remainedTasks, code);
                  }
                  currentCount--;
                  if (currentCount === 0 && remainedTasks.length === 0) {
                      callWaitAllCallbacks();
                  }
              });
              resolved(process);
          });
      } else {
          var id = taskId++;
          remainedTasks.push([args, id]);
          if (monitorCallback) {
              monitorCallback("added", remainedTasks);
          }
          return new Promise(function (resolved) {
              remainedTaskCallbacks[id] = resolved;
          });
      }
  }
docs: /*
  It is compatible method of child_process.spawn, but it returns Promise.
  Promise result is process object.