Я пытаюсь скомпилировать программу на компьютере с недостаточным охлаждением.
Программа представляет собой linux-ck
ядро с -mtune=native march=native
оптимизацией под конкретный процессор, поэтому простой запуск ее на другом компьютере сводит на нет всю ее суть.
В настоящее время мы пытаемся решить проблемы с охлаждением.ПРИМЕЧАНИЕ:У меня нет физического доступа к компьютеру, поэтому, пожалуйста, не пытайтесь помочь мне устранить неполадки.
Вместо этого мне нужен способ приостановить программу (управление заданием оболочки « ^Z
-style»), когда температура ЦП превышает определенную, измеренную sensors
, и возобновить ее работу, как только температура будет измерена и вернется к безопасному уровню.
ПРИМЕЧАНИЕ:Этот компьютер уже нагревался до 91°C.
На компьютере установлена операционная система Arch Linux, полностью обновленная.
решение1
Решение состоит в том, чтобы присвоить PID основной задачи переменной и написать скрипт, который:
проверки говорят каждые ~10 секунд температура. Что-то вроде
temp=($(sensors | awk -F'[+.]' '{print $2}'))
создает таблицу
temp
с двумя температурами (acpitz и coretemp) на моем компьютере, вам может потребоваться настроить ее для вашего выводаsensors
.если temp > $TEMPMAX отправляет
kill -TSTP PID
в задание (CTRL-Z, также известное как приостановка)(( $temp[1] > 80 || $temp[2] > 80 )) && kill -TSTP $JOBPID
если temp < $TEMPRUN отправляет
kill -CONT PID
в задание (то же самое, что и команда bg)(( $temp[1] < 40 && $temp[2] < 40 )) && kill -CONT $JOBPID
Поскольку скрипт будет выполняться очень часто, вам может понадобиться получить временный файл из источника вместо sensors
команды, чтобы немного ускориться. На некоторых машинах это работает:
temp=($(cut -c 1-2 /sys/class/hwmon/hwmon0/temp1_input) $(cut -c 1-2 /sys/class/hwmon/hwmon1/device/temp2_input))
но опять же, вам, возможно, придется настроить его под свои нужды.