
我正在嘗試在冷卻不足的計算機上編譯程式。
具體來說,該程式是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))
但同樣,您可能需要根據您的需求進行調整。