public void checkPendingProcesses() {
    try {

      long now = System.currentTimeMillis();

      for (PasswordManagementProcess process : runningProcesses.values()) {

        try {
          List<PasswordManagementProcess> toRemove = new ArrayList<PasswordManagementProcess>();

          // Ignore valid assertions, they have not expired yet.
          if (!process.isRunning()
              || process.getCreationTime() - now > process.getMaxTimeToLive()) {
            toRemove.add(process);
            /// registry.unregisterToken(securityDomainName, TOKEN_TYPE, process.getId());
            if (log.isDebugEnabled())
              log.debug("[checkPendingProcesses()] Process expired : " + process.getProcessId());
          }

          for (PasswordManagementProcess passwordManagementProcess : toRemove) {
            try {
              passwordManagementProcess.stop();
            } catch (Exception e) {
              log.debug(e.getMessage(), e);
            }
            runningProcesses.remove(passwordManagementProcess.getProcessId());
          }

        } catch (Exception e) {
          log.warn(
              "Can't remove process " + e.getMessage() != null ? e.getMessage() : e.toString(), e);
        }
      }
    } catch (Exception e) {
      log.error("Cannot check pending processes! " + e.getMessage(), e);
    }
  }