Как создать скрипт-сторож для приостановки и продолжения процессов в случае, если запущены другие процессы, интенсивно использующие процессор?

Как создать скрипт-сторож для приостановки и продолжения процессов в случае, если запущены другие процессы, интенсивно использующие процессор?

У меня есть очень большая тестовая установка, которая работает в течение нескольких дней на сервере, используемом многими сторонами в моем университете.

Я хотел бы приостановить процесс по pid (а также процессы, выполняемые процессом (если в данный момент есть запущенные процессы) и продолжить его выполнение всякий раз, когда останавливаются процессы, интенсивно использующие процессор. Я бы считал процесс, интенсивно использующий процессор, актуальным, если он использует хотя бы одно ядро ​​на 100% в течение более 15 секунд.

(Я не совсем уверен, как интерпретировать «верхний» вывод, но часто появляются процессы с загрузкой процессора 2300%, что я интерпретирую как 23 ядра, работающие на 100% или 22 на (100%-x%)*22=2300% и т. д.)

Чтобы приостановить процесс, мне нужно выбрать одну из двух команд bash:

kill -TSTP [pid]

и

kill -STOP [pid]

для продолжения процесса я бы использовал:

kill -CONT [pid]

Так как мойскрипт на Pythonвыполненный в тестовой установке делаетизмерения времени выполнения процессов, выполняемых имЯ хотел бы спросить, есть ли способизмеряйте только время, пока выполняется процесс? (Я также измеряю точное время вычислений с помощью встроенной функции процесса, выполняемого моим скриптом Python, но из-за некоторых сомнительных результатов (абсолютное время сомнительно, относительное время кажется правильным) я также хотел бы получить менее точное, но, по крайней мере, в некоторой степени пригодное для использования измерение времени извне (скрипт Python))

Краткое содержание

  1. Как мне разработать скрипт, который находит эти процессы и реагирует соответствующим образом? (На сервере нет прав root, но мне разрешено видеть все выполняемые процессы и управлять своими собственными процессами)
  2. Как выполнить точные измерения времени (+/- 10 секунд) для этих процессов, не включая время приостановки процесса?

Связанный контент