J'utilise lscpu | grep 'MHz'
pour obtenir ma vitesse d'horloge. J'obtiens des résultats différents en fonction de la méthode que j'appelle cette commande.
Méthode 1: le taper dans le terminalCPU MHz: 1200.000
Méthode 2: l'encapsulation dans un script appelé test.sh
Code de script:
#! /bin/bash
cpu=$(lscpu | grep 'MHz')
echo $cpu
Ensuite, dans le terminaL
$ chmod +x test.sh
$ ./test.sh
Production:CPU MHz: 1200.000
Jusqu'ici tout va bien. Mais maintenant, méthode 3: afficher le "exécuter ou afficher le fichier actuel" dans Geany sur test.sh. Production:CPU MHz: 2200.000
Méthode 4: écriture d'un script python appelé test.py qui appelle test.sh.
Code de script Python:
#! /usr/bin/python
import subprocess
def test():
subprocess.call("./test.sh")
if __== '__main__':
test()
Ensuite, dans le terminal:$ python test.py
Production:CPU MHz: 2200.000
J'ai essayé les deux python et python3. Les deux donnent le même résultat (erroné).
Pourquoi lscpu
donne-t-il une sortie différente lorsqu'elle est exécutée indirectement? Et comment puis-je résoudre ce problème/contourner cela? Quelque chose ne va pas dans mon code? Pour ce que ça vaut, j'utilise Ubuntu 13.10.
Merci :-).
C'est une coïncidence, c'est votre système qui change la fréquence actuelle du processeur.
Vérifiez avec cette commande dans un terminal:
watch -n 0 "lscpu | grep 'MHz'"
Vous verrez (en attendant un peu) que la fréquence du processeur du système commute.
Vous pouvez également obtenir votre fréquence CPU actuelle avec cette commande:
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
Et votre fréquence de processeur maximale/minimale avec celles-ci:
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
Changer le comportement? Le gouverneur cpu décide quelle fréquence doit être utilisée. Voir ceci documentation du noyau linux pour décider avec le gouverneur cpu qui vous convient le mieux.
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo "powersave" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
La plupart des processeurs modernes peuvent ajuster leur fréquence d'horloge. Le gouverneur par défaut sur Linux est "à la demande", ce qui maintient la vitesse d'horloge basse pour économiser de l'énergie lorsqu'elle est inactive et l'accélère pour faire le travail en cas de besoin.
Voir https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt