Ejemplo n.º 1
0
def test_getChildrenPIDs():
  import os
  os.system("echo $PWD")
  mainProcess = Popen(['python', join(dirname(__file__), 'ProcessesCreator.py')])
  time.sleep(1)
  res = getChildrenPIDs(mainProcess.pid)
  assert len(res) == 3
  for p in res:
    assert isinstance(p, int)

  mainProcess.wait()
Ejemplo n.º 2
0
def test_getChildrenPIDs():
    import os
    os.system("echo $PWD")
    mainProcess = Popen(['python', 'Core/Utilities/test/ProcessesCreator.py'])
    time.sleep(1)
    res = getChildrenPIDs(mainProcess.pid)
    assert len(res) == 3
    for p in res:
        assert isinstance(p, int)

    mainProcess.wait()
Ejemplo n.º 3
0
    def _performWallClockChecks(self):
        """Watchdog performs the wall clock checks based on MJF. Signals are sent
       to processes if we need to stop, but function always returns S_OK()
    """
        mjf = MJF.MJF()

        try:
            wallClockSecondsLeft = mjf.getWallClockSecondsLeft()
        except Exception as e:
            # Just stop if we can't get the wall clock seconds left
            return S_OK()

        jobstartSeconds = mjf.getIntJobFeature('jobstart_secs')
        if jobstartSeconds is None:
            # Just stop if we don't know when the job started
            return S_OK()

        if (int(time.time()) > jobstartSeconds + self.stopSigStartSeconds) and \
           (wallClockSecondsLeft < self.stopSigFinishSeconds + self.wallClockCheckSeconds):
            # Need to send the signal! Assume it works to avoid sending the signal more than once
            self.log.info('Sending signal %d to JobWrapper children' %
                          self.stopSigNumber)
            self.stopSigSent = True

            try:
                for childPid in getChildrenPIDs(self.wrapperPID):
                    try:
                        cmdline = open('/proc/%d/cmdline' % childPid,
                                       'r').read().replace('\0', ' ').strip()
                    except IOError:
                        # Process gone away? Not running on Linux? Skip anyway
                        continue

                    if re.search(self.stopSigRegex, cmdline) is not None:
                        self.log.info(
                            'Sending signal %d to process ID %d, cmdline = "%s"'
                            % (self.stopSigNumber, childPid, cmdline))
                        os.kill(childPid, self.stopSigNumber)

            except Exception as e:
                self.log.error(
                    'Failed to send signals to JobWrapper children! (%s)' %
                    str(e))

        return S_OK()
Ejemplo n.º 4
0
  def _performWallClockChecks(self):
    """Watchdog performs the wall clock checks based on MJF. Signals are sent
       to processes if we need to stop, but function always returns S_OK()
    """
    mjf = MJF.MJF()

    try:
      wallClockSecondsLeft = mjf.getWallClockSecondsLeft()
    except Exception as e:
      # Just stop if we can't get the wall clock seconds left
      return S_OK()

    jobstartSeconds = mjf.getIntJobFeature('jobstart_secs')
    if jobstartSeconds is None:
      # Just stop if we don't know when the job started
      return S_OK()

    if (int(time.time()) > jobstartSeconds + self.stopSigStartSeconds) and \
       (wallClockSecondsLeft < self.stopSigFinishSeconds + self.wallClockCheckSeconds):
      # Need to send the signal! Assume it works to avoid sending the signal more than once
      self.log.info('Sending signal %d to JobWrapper children' % self.stopSigNumber)
      self.stopSigSent = True

      try:
        for childPid in getChildrenPIDs(self.wrapperPID):
          try:
            cmdline = open('/proc/%d/cmdline' % childPid, 'r').read().replace('\0', ' ').strip()
          except IOError:
            # Process gone away? Not running on Linux? Skip anyway
            continue

          if re.search(self.stopSigRegex, cmdline) is not None:
            self.log.info(
                'Sending signal %d to process ID %d, cmdline = "%s"' %
                (self.stopSigNumber, childPid, cmdline))
            os.kill(childPid, self.stopSigNumber)

      except Exception as e:
        self.log.error('Failed to send signals to JobWrapper children! (%s)' % str(e))

    return S_OK()