#3004·psutil

[FreeBSD] freebsd/sensors.c: Unhandled error from sysctlbyname on systems without coretemp (eg anything AMD)

Author: agrajag9Created Sep 18, 2026Updated Sep 18, 2026
Labelsbugfreebsdbadexc

sysctlbyname() returns ERR#2 'No such file or directory' on AMD and other non-coretemp systems.

https://github.com/giampaolo/psutil/blob/9eea97dd6f1d16ea33f5144c8925f1ce7a0688e1/psutil/arch/freebsd/sensors.c#L67-L68

There is no error handling code around this, which ultimately causes psutil.sensors_temperatures() to fail, despite being able to return current temperatures.

On my AMD 5950X with amdtemp.ko loaded:

$ sysctl -a | egrep -E ': [0-9\.]{1,4}C$'
dev.amdtemp.0.ccd1: 72.1C
dev.amdtemp.0.ccd0: 67.0C
dev.amdtemp.0.core0.sensor0: 72.1C
dev.cpu.31.temperature: 72.1C
dev.cpu.30.temperature: 72.1C
dev.cpu.29.temperature: 72.1C
dev.cpu.28.temperature: 72.1C
dev.cpu.27.temperature: 72.1C
dev.cpu.26.temperature: 72.1C
dev.cpu.25.temperature: 72.1C
dev.cpu.24.temperature: 72.1C
dev.cpu.23.temperature: 72.1C
dev.cpu.22.temperature: 72.1C
dev.cpu.21.temperature: 72.1C
dev.cpu.20.temperature: 72.1C
dev.cpu.19.temperature: 72.1C
dev.cpu.18.temperature: 72.1C
dev.cpu.17.temperature: 72.1C
dev.cpu.16.temperature: 72.1C
dev.cpu.15.temperature: 72.1C
dev.cpu.14.temperature: 72.1C
dev.cpu.13.temperature: 72.1C
dev.cpu.12.temperature: 72.1C
dev.cpu.11.temperature: 72.1C
dev.cpu.10.temperature: 72.1C
dev.cpu.9.temperature: 72.1C
dev.cpu.8.temperature: 72.1C
dev.cpu.7.temperature: 72.1C
dev.cpu.6.temperature: 72.1C
dev.cpu.5.temperature: 72.1C
dev.cpu.4.temperature: 72.1C
dev.cpu.3.temperature: 72.1C
dev.cpu.2.temperature: 72.1C
dev.cpu.1.temperature: 72.1C
dev.cpu.0.temperature: 72.1C

Steps to recreate:

>>> import psutil
>>> psutil.sensors_temperatures()
FileNotFoundError: [Errno 2] No such file or directory (originated from sysctlbyname('dev.cpu.0.coretemp.tjmax'))

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.12/site-packages/psutil/__init__.py", line 2325, in sensors_temperatures
    rawdict = _psplatform.sensors_temperatures()
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/psutil/_psbsd.py", line 425, in sensors_temperatures
    current, high = cext.sensors_cpu_temperature(cpu)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SystemError: <built-in function sensors_cpu_temperature> returned a result with an exception set

If we hook python with truss we can see exactly the syscall and returned error:

     43 80471: 3.171309199 __sysctl("hw.ncpu",2,0x7fffffffd844,0x7fffffffd838,0x0,0) = 0 (0x0)
     44 80471: 3.171371820 __sysctlbyname("dev.cpu.0.temperature",21,0x7fffffffd81c,0x7fffffffd6c8,0x0,0) = 0 (0x0)
     45 80471: 3.171405861 __sysctlbyname("dev.cpu.0.coretemp.tjmax",24,0x7fffffffd818,0x7fffffffd6c8,0x0,0) ERR#2 'No such file or directory'
     46 80471: 3.171548793 write(2,"FileNotFoundError: [Errno 2] No such file or directory (originated from sysctlbyname('dev.cpu.0.coretemp.tjmax'))\n",114) = 114 (0x72)