如何在 Linux 中正确获取任意 CPU 的温度?

如何在 Linux 中正确获取任意 CPU 的温度?

我需要的?

我正在创建一个软件,我需要获取任何 CPU(x86_64)的温度,可以通过读取文件、执行一些用 C 编写的 api 或者在 GNU/Linux 系统中执行一些有或无权限的命令来获取。

我在哪里搜索过?

我在互联网上搜索了很多,甚至一些有同样问题的 stackoverflow 帖子,但没有一个涉及获取任何 CPU 的一般温度,它们都为过时的系统或某些特定的 CPU 型号提供了定制的解决方案,但我没有找到任何可以正确提供 CPU 温度的软件。

哪里有问题?

  • lm_sensors:它不提供 CPU 的温度指示器,它只读取带有值的 ID,但无法指示所有 ID 中的哪一个对应于 CPU,例如,在 AMD Ryzen 7 中是k10temp-pci-00c3。我如何从编程代码中判断它属于 CPU 而不是其他东西?作为用​​户,您必须使用常识进行猜测,但我的软件无法猜测。使用和 时也k10temp-pci-00c3存在同样的问题。hardinfoxsensors
  • cat /sys/class/thermal/thermal_zone*/temp:并非所有硬件都使用此路径来设置温度,例如 AMD Ryzen 7 不使用这些路径,Radeon RX 6800 XT 也使用此路径,因此大多数从此路径获取温度的软件将显示 GPU 的温度而不是 CPU 的温度,就像和Conky一样CPU-X
  • acpi:使用 AMD CPU 时,它不显示任何与温度相关的信息。

相关内容