Ich versuche, ein Programm auf einem Computer mit unzureichender Kühlung zu kompilieren.
Bei dem Programm handelt es sich genauer gesagt um den linux-ck
Kernel mit -mtune=native march=native
prozessorspezifischen Optimierungen. Es einfach auf einem anderen Computer auszuführen, verfehlt also seinen Zweck.
Wir versuchen derzeit, die Kühlungsprobleme zu lösen.NOTIZ:Ich habe keinen physischen Zugriff auf den Computer. Versuchen Sie daher bitte nicht, mir bei der Fehlerbehebung zu helfen.
Ich brauche stattdessen eine Möglichkeit, das Programm anzuhalten (Shell-Job-Steuerung im „ ^Z
-Stil“), wenn die CPU eine bestimmte Temperatur überschreitet (gemessen mit sensors
), und es fortzusetzen, sobald die Temperatur wieder auf einem sicheren Niveau liegt.
NOTIZ:Dieser Computer hat schon einmal 91 °C erreicht.
Auf dem Computer läuft Arch Linux und er ist vollständig aktualisiert.
Antwort1
Die Lösung besteht darin, der Variablen eine PID des Hauptjobs zuzuweisen und ein Skript zu schreiben, das:
prüft etwa alle ~10 Sekunden die Temperatur. So etwas wie
temp=($(sensors | awk -F'[+.]' '{print $2}'))
erstellt auf meiner Box eine Tabelle
temp
mit zwei Temperaturen (acpitz und coretemp). Möglicherweise müssen Sie sie für Ihre Ausgabe anpassensensors
.if temp > $TEMPMAX sendet
kill -TSTP PID
an den Job (STRG-Z, auch bekannt als Suspend)(( $temp[1] > 80 || $temp[2] > 80 )) && kill -TSTP $JOBPID
if temp < $TEMPRUN sendet
kill -CONT PID
an den Job (dasselbe wie der bg-Befehl)(( $temp[1] < 40 && $temp[2] < 40 )) && kill -CONT $JOBPID
Da das Skript sehr oft ausgeführt wird, möchten Sie möglicherweise eine temporäre Datei von der Quelle statt vom sensors
Befehl abrufen, um etwas an Geschwindigkeit zu gewinnen. Auf vielen Rechnern funktioniert das:
temp=($(cut -c 1-2 /sys/class/hwmon/hwmon0/temp1_input) $(cut -c 1-2 /sys/class/hwmon/hwmon1/device/temp2_input))
Aber Sie müssen es möglicherweise noch einmal an Ihre Bedürfnisse anpassen.