我正在尝试在冷却不足的计算机上编译程序。
具体来说,该程序是linux-ck
具有特定于处理器的优化的内核-mtune=native march=native
,因此简单地在不同的计算机上运行它就达不到目的。
我们目前正在努力解决冷却问题。笔记:我无法实际访问计算机,因此请不要尝试帮助我排除故障。
^Z
相反,我需要一种方法,当 CPU 超过某个温度(由 测量)时暂停程序(shell 作业控制“ -style”) sensors
,并在测量温度回到安全水平后恢复程序。
笔记:这台电脑之前曾达到过91°C。
该计算机运行 Arch Linux 并已完全更新。
答案1
解决方案是将主作业的 PID 分配给变量并编写一个脚本,其中:
每约 10 秒检查一次温度。就像是
temp=($(sensors | awk -F'[+.]' '{print $2}'))
在我的盒子上创建一个包含两个温度(acpitz 和 coretemp)的表
temp
,您可能需要根据 的输出调整它sensors
。如果 temp > $TEMPMAX 发送
kill -TSTP PID
到作业(CTRL-Z,又名挂起)(( $temp[1] > 80 || $temp[2] > 80 )) && kill -TSTP $JOBPID
if 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))
但同样,您可能需要根据您的需要进行调整。