Skip to content

Update psutil to 7.2.2#1077

Closed
pyup-bot wants to merge 1 commit into
masterfrom
pyup-update-psutil-5.9.0-to-7.2.2
Closed

Update psutil to 7.2.2#1077
pyup-bot wants to merge 1 commit into
masterfrom
pyup-update-psutil-5.9.0-to-7.2.2

Conversation

@pyup-bot

Copy link
Copy Markdown
Collaborator

This PR updates psutil from 5.9.0 to 7.2.2.

Changelog

7.2.2

=====

2026-01-28

**Enhancements**

- 2705_: [Linux]: `Process.wait()`_ now uses ``pidfd_open()`` + ``poll()`` for
waiting, resulting in no busy loop and faster response times. Requires
Linux >= 5.3 and Python >= 3.9. Falls back to traditional polling if
unavailable.
- 2705_: [macOS], [BSD]: `Process.wait()`_ now uses ``kqueue()`` for waiting,
resulting in no busy loop and faster response times.

**Bug fixes**

- 2701_, [macOS]: fix compilation error on macOS < 10.7.  (patch by Sergey
Fedorov)
- 2707_, [macOS]: fix potential memory leaks in error paths of
`Process.memory_full_info()` and `Process.threads()`.
- 2708_, [macOS]: Process.cmdline()`_ and `Process.environ()`_ may fail with
``OSError: [Errno 0] Undefined error`` (from ``sysctl(KERN_PROCARGS2)``).
They now raise `AccessDenied`_ instead.

7.2.1

=====

2025-12-29

**Bug fixes**

- 2699_, [FreeBSD], [NetBSD]: `heap_info()`_ does not detect small allocations
(<= 1K). In order to fix that, we now flush internal jemalloc cache before
fetching the metrics.

7.2.0

=====

2025-12-23

**Enhancements**

- 1275_: new `heap_info()`_ and `heap_trim()`_ functions, providing direct
access to the platform's native C heap allocator (glibc, mimalloc,
libmalloc). Useful to create tools to detect memory leaks.
- 2403_, [Linux]: publish wheels for Linux musl.
- 2680_: unit tests are no longer installed / part of the distribution. They
now live under `tests/` instead of `psutil/tests`.

**Bug fixes**

* 2684_, [FreeBSD], [critical]: compilation fails on FreeBSD 14 due to missing
include.
* 2691_, [Windows]: fix memory leak in `net_if_stats()`_ due to missing
``Py_CLEAR``.

**Compatibility notes**

- 2680_: `import psutil.tests` no longer works (but it was never documented to
begin with).

7.1.3

=====

2025-11-02

**Enhancements**

- 2667_: enforce `clang-format` on all C and header files. It is now the
mandatory formatting style for all C sources.
- 2672_, [macOS], [BSD]: increase the chances to recognize zombie processes and
raise the appropriate exception (`ZombieProcess`_).
- 2676_, 2678_: replace unsafe `sprintf` / `snprintf` / `sprintf_s` calls with
`str_format()`. Replace `strlcat` / `strlcpy` with safe `str_copy` /
`str_append`. This unifies string handling across platforms and reduces
unsafe usage of standard string functions, improving robustness.

**Bug fixes**

- 2674_, [Windows]: `disk_usage()`_ could truncate values on 32-bit platforms,
potentially reporting incorrect total/free/used space for drives larger than
4GB.
- 2675_, [macOS]: `Process.status()`_ incorrectly returns "running" for 99%
of the processes.
- 2677_, [Windows]: fix MAC address string construction in `net_if_addrs()`_.
Previously, the MAC address buffer was incorrectly updated using a fixed
increment and `sprintf_s`, which could overflow or misformat the
string if the MAC length or formatting changed. Also, the final '\n' was
inserted unnecessarily.
- 2679_, [OpenBSD], [NetBSD], [critical]: can't build due to C syntax error.

7.1.2

=====

2025-10-25

**Enhancements**

- 2657_: stop publishing prebuilt Linux and Windows wheels for 32-bit Python.
32-bit CPython is still supported, but psutil must now be built from source.
2565_: produce wheels for free-thread cPython 3.13 and 3.14 (patch by
Lysandros Nikolaou)

**Bug fixes**

- 2650_, [macOS]: `Process.cmdline()`_ and `Process.environ()`_ may incorrectly
raise `NoSuchProcess`_ instead of `ZombieProcess`_.
- 2658_, [macOS]: double ``free()`` in `Process.environ()`_ when it fails
internally. This posed a risk of segfault.
- 2662_, [macOS]: massive C code cleanup to guard against possible segfaults
which were (not so) sporadically spotted on CI.

**Compatibility notes**

- 2657_: stop publishing prebuilt Linux and Windows wheels for 32-bit Python.

7.1.1

=====

2025-10-19

**Enhancements**

- 2645_, [SunOS]: dropped support for SunOS 10.
- 2646_, [SunOS]: add CI test runner for SunOS.

**Bug fixes**

- 2641_, [SunOS]: cannot compile psutil from sources due to missing C include.
- 2357_, [SunOS]: `Process.cmdline()`_ does not handle spaces properly. (patch
by Ben Raz)

**Compatibility notes**

* 2645_: SunOS 10 is no longer supported.

7.1.0

=====

2025-09-17

**Enhancements**

- 2581_, [Windows]: publish ARM64 wheels.  (patch by Matthieu Darbois)
- 2571_, [FreeBSD]: Dropped support for FreeBSD 8 and earlier. FreeBSD 8 was
maintained from 2009 to 2013.
- 2575_: introduced `dprint` CLI tool to format .yml and .md files.

**Bug fixes**

- 2473_, [macOS]: Fix build issue on macOS 11 and lower.
- 2494_, [Windows]: All APIs dealing with paths, such as
`Process.memory_maps()`_, `Process.exe()`_ and `Process.open_files()`_ does
not properly handle UNC paths. Paths such as ``\\??\\C:\\Windows\\Temp`` and
``'\\Device\\HarddiskVolume1\\Windows\\Temp'`` are now converted to
``C:\\Windows\\Temp``.  (patch by Ben Peddell)
- 2506_, [Windows]: Windows service APIs had issues with unicode services using
special characters in their name.
- 2514_, [Linux]: `Process.cwd()`_ sometimes fail with `FileNotFoundError` due
to a race condition.
- 2526_, [Linux]: `Process.create_time()`_, which is used to univocally
identify a process over time, is subject to system clock updates, and as such
can lead to `Process.is_running()`_ returning a wrong result. A monotonic
creation time is now used instead.  (patch by Jonathan Kohler)
- 2528_, [Linux]: `Process.children()`_ may raise ``PermissionError``. It will
now raise `AccessDenied`_ instead.
- 2540_, [macOS]: `boot_time()`_ is off by 45 seconds (C precision issue).
- 2541_, 2570_, 2578_ [Linux], [macOS], [NetBSD]: `Process.create_time()`_ does
not reflect system clock updates.
- 2542_: if system clock is updated `Process.children()`_ and
`Process.parent()`_ may not be able to return the right information.
- 2545_: [Illumos]: Fix handling of MIB2_UDP_ENTRY in `net_connections()`_.
- 2552_, [Windows]: `boot_time()`_ didn't take into account the time spent
during suspend / hibernation.
- 2560_, [Linux]: `Process.memory_maps()`_ may crash with `IndexError` on
RISCV64 due to a malformed `/proc/{PID}/smaps` file.  (patch by Julien
Stephan)
- 2586_, [macOS], [CRITICAL]: fixed different places in C code which can
trigger a segfault.
- 2604_, [Linux]: `virtual_memory()`_ "used" memory does not match recent
versions of ``free`` CLI utility.  (patch by Isaac K. Ko)
- 2605_, [Linux]: `psutil.sensors_battery()` reports a negative amount for
seconds left.
- 2607_, [Windows]: ``WindowsService.description()`` method may fail with
``ERROR_NOT_FOUND``. Now it returns an empty string instead.
- 2610:, [macOS], [CRITICAL]: fix `cpu_freq()`_ segfault on ARM architectures.

**Compatibility notes**

- 2571_: dropped support for FreeBSD 8 and earlier.

7.0.0

=====

2025-02-13

**Enhancements**

- 669_, [Windows]: `net_if_addrs()`_ also returns the ``broadcast`` address
instead of ``None``.
- 2480_: Python 2.7 is no longer supported. Latest version supporting Python
2.7 is psutil 6.1.X. Install it with: ``pip2 install psutil==6.1.*``.
- 2490_: removed long deprecated ``Process.memory_info_ex()`` method. It was
deprecated in psutil 4.0.0, released 8 years ago. Substitute is
``Process.memory_full_info()``.

**Bug fixes**

- 2496_, [Linux]: Avoid segfault (a cPython bug) on ``Process.memory_maps()``
for processes that use hundreds of GBs of memory.
- 2502_, [macOS]: `virtual_memory()`_ now relies on ``host_statistics64``
instead of ``host_statistics``. This is the same approach used by ``vm_stat``
CLI tool, and should grant more accurate results.

**Compatibility notes**

- 2480_: Python 2.7 is no longer supported.
- 2490_: removed long deprecated ``Process.memory_info_ex()`` method.

6.1.1

=====

2024-12-19

**Enhancements**

- 2471_: use Vulture CLI tool to detect dead code.

**Bug fixes**

- 2418_, [Linux]: fix race condition in case /proc/PID/stat does not exist, but
/proc/PID does, resulting in FileNotFoundError.
- 2470_, [Linux]: `users()`_ may return "localhost" instead of the actual IP
address of the user logged in.

6.1.0

=====

2024-10-17

**Enhancements**

- 2366_, [Windows]: drastically speedup `process_iter()`_. We now determine
process unique identity by using process "fast" create time method. This
will considerably speedup those apps which use `process_iter()`_ only once,
e.g. to look for a process with a certain name.
- 2446_: use pytest instead of unittest.
- 2448_: add ``make install-sysdeps`` target to install the necessary system
dependencies (python-dev, gcc, etc.) on all supported UNIX flavors.
- 2449_: add ``make install-pydeps-test`` and ``make install-pydeps-dev``
targets. They can be used to install dependencies meant for running tests and
for local development. They can also be installed via ``pip install .[test]``
and ``pip install .[dev]``.
- 2456_: allow to run tests via ``python3 -m psutil.tests`` even if ``pytest``
module is not installed. This is useful for production environments that
don't have pytest installed, but still want to be able to test psutil
installation.

**Bug fixes**

- 2427_: psutil (segfault) on import in the free-threaded (no GIL) version of
Python 3.13.  (patch by Sam Gross)
- 2455_, [Linux]: ``IndexError`` may occur when reading /proc/pid/stat and
field 40 (blkio_ticks) is missing.
- 2457_, [AIX]: significantly improve the speed of `Process.open_files()`_ for
some edge cases.
- 2460_, [OpenBSD]: `Process.num_fds()`_ and `Process.open_files()`_ may fail
with `NoSuchProcess`_ for PID 0. Instead, we now return "null" values (0 and
[] respectively).

6.0.0

- 2109_: the namedtuple returned by `disk_partitions()`_' no longer has
``maxfile`` and ``maxpath`` fields.
- 2396_: `process_iter()`_ no longer pre-emptively checks whether PIDs have
been reused. If you want to check for PID reusage you are supposed to use
`Process.is_running()`_ against the yielded `Process`_ instances. That will
also automatically remove reused PIDs from `process_iter()`_ internal cache.
- 2407_: `Process.connections()`_ was renamed to `Process.net_connections()`_.
The old name is still available, but it's deprecated (triggers a
``DeprecationWarning``) and will be removed in the future.

5.9.8

=====

2024-01-19

**Enhancements**

- 2343_, [FreeBSD]: filter `net_connections()`_ returned list in C instead of
Python, and avoid to retrieve unnecessary connection types unless explicitly
asked. E.g., on an IDLE system with few IPv6 connections this will run around
4 times faster. Before all connection types (TCP, UDP, UNIX) were retrieved
internally, even if only a portion was returned.
- 2342_, [NetBSD]: same as above (2343) but for NetBSD.
- 2349_: adopted black formatting style.

**Bug fixes**

- 930_, [NetBSD], [critical]: `net_connections()`_ implementation was broken.
It could either leak memory or core dump.
- 2340_, [NetBSD]: if process is terminated, `Process.cwd()`_ will return an
empty string instead of raising `NoSuchProcess`_.
- 2345_, [Linux]: fix compilation on older compiler missing DUPLEX_UNKNOWN.
- 2222_, [macOS]: `cpu_freq()` now returns fixed values for `min` and `max`
frequencies in all Apple Silicon chips.

5.9.7

=====

2023-12-17

**Enhancements**

- 2324_: enforce Ruff rule `raw-string-in-exception`, which helps providing
clearer tracebacks when exceptions are raised by psutil.

**Bug fixes**

- 2325_, [PyPy]: psutil did not compile on PyPy due to missing
`PyErr_SetExcFromWindowsErrWithFilenameObject` cPython API.

5.9.6

=====

2023-10-15

**Enhancements**

- 1703_: `cpu_percent()`_ and `cpu_times_percent()`_ are now thread safe,
meaning they can be called from different threads and still return
meaningful and independent results. Before, if (say) 10 threads called
``cpu_percent(interval=None)`` at the same time, only 1 thread out of 10
would get the right result.
- 2266_: if `Process`_ class is passed a very high PID, raise `NoSuchProcess`_
instead of OverflowError.  (patch by Xuehai Pan)
- 2246_: drop python 3.4 & 3.5 support.  (patch by Matthieu Darbois)
- 2290_: PID reuse is now pre-emptively checked for `Process.ppid()`_  and
`Process.parents()`_.
- 2312_: use ``ruff`` Python linter instead of ``flake8 + isort``. It's an
order of magnitude faster + it adds a ton of new code quality checks.

**Bug fixes**

- 2195_, [Linux]: no longer print exception at import time in case /proc/stat
can't be read due to permission error. Redirect it to ``PSUTIL_DEBUG``
instead.
- 2241_, [NetBSD]: can't compile On NetBSD 10.99.3/amd64.  (patch by Thomas
Klausner)
- 2245_, [Windows]: fix var unbound error on possibly in `swap_memory()`_
(patch by student_2333)
- 2268_: ``bytes2human()`` utility function was unable to properly represent
negative values.
- 2252_, [Windows]: `disk_usage()`_ fails on Python 3.12+.  (patch by
Matthieu Darbois)
- 2284_, [Linux]: `Process.memory_full_info()`_ may incorrectly raise
`ZombieProcess`_ if it's determined via ``/proc/pid/smaps_rollup``. Instead
we now fallback on reading ``/proc/pid/smaps``.
- 2287_, [OpenBSD], [NetBSD]: `Process.is_running()`_ erroneously return
``False`` for zombie processes, because creation time cannot be determined.
- 2288_, [Linux]: correctly raise `ZombieProcess`_ on `Process.exe()`_,
`Process.cmdline()`_ and `Process.memory_maps()`_ instead of returning a
"null" value.
- 2290_: differently from what stated in the doc, PID reuse is not
pre-emptively checked for `Process.nice()`_ (set), `Process.ionice()`_,
(set), `Process.cpu_affinity()`_ (set), `Process.rlimit()`_
(set), `Process.parent()`_.
- 2308_, [OpenBSD]: `Process.threads()`_ always fail with AccessDenied (also as
root).

5.9.5

=====

2023-04-17

**Enhancements**

- 2196_: in case of exception, display a cleaner error traceback by hiding the
`KeyError` bit deriving from a missed cache hit.
- 2217_: print the full traceback when a `DeprecationWarning` or `UserWarning`
is raised.
- 2230_, [OpenBSD]: `net_connections()`_ implementation was rewritten
from scratch:
- We're now able to retrieve the path of AF_UNIX sockets (before it was an
empty string)
- The function is faster since it no longer iterates over all processes.
- No longer produces duplicate connection entries.
- 2238_: there are cases where `Process.cwd()`_ cannot be determined
(e.g. directory no longer exists), in which case we returned either ``None``
or an empty string. This was consolidated and we now return ``""`` on all
platforms.
- 2239_, [UNIX]: if process is a zombie, and we can only determine part of the
its truncated `Process.name()`_ (15 chars), don't fail with `ZombieProcess`_
when we try to guess the full name from the `Process.cmdline()`_. Just
return the truncated name.
- 2240_, [NetBSD], [OpenBSD]: add CI testing on every commit for NetBSD and
OpenBSD platforms (python 3 only).

**Bug fixes**

- 1043_, [OpenBSD] `net_connections()`_ returns duplicate entries.
- 1915_, [Linux]: on certain kernels, ``"MemAvailable"`` field from
``/proc/meminfo`` returns ``0`` (possibly a kernel bug), in which case we
calculate an approximation for ``available`` memory which matches "free"
CLI utility.
- 2164_, [Linux]: compilation fails on kernels < 2.6.27 (e.g. CentOS 5).
- 2186_, [FreeBSD]: compilation fails with Clang 15.  (patch by Po-Chuan Hsieh)
- 2191_, [Linux]: `disk_partitions()`_: do not unnecessarily read
/proc/filesystems and raise `AccessDenied`_ unless user specified `all=False`
argument.
- 2216_, [Windows]: fix tests when running in a virtual environment (patch by
Matthieu Darbois)
- 2225_, [POSIX]: `users()`_ loses precision for ``started`` attribute (off by
1 minute).
- 2229_, [OpenBSD]: unable to properly recognize zombie processes.
`NoSuchProcess`_ may be raised instead of `ZombieProcess`_.
- 2231_, [NetBSD]: *available*  `virtual_memory()`_ is higher than *total*.
- 2234_, [NetBSD]: `virtual_memory()`_ metrics are wrong: *available* and
*used* are too high. We now match values shown by *htop* CLI utility.
- 2236_, [NetBSD]: `Process.num_threads()`_ and `Process.threads()`_ return
threads that are already terminated.
- 2237_, [OpenBSD], [NetBSD]: `Process.cwd()`_ may raise ``FileNotFoundError``
if cwd no longer exists. Return an empty string instead.

5.9.4

=====

2022-11-07

**Enhancements**

- 2102_: use Limited API when building wheels with CPython 3.6+ on Linux,
macOS and Windows. This allows to use pre-built wheels in all future versions
of cPython 3.  (patch by Matthieu Darbois)

**Bug fixes**

- 2077_, [Windows]: Use system-level values for `virtual_memory()`_. (patch by
Daniel Widdis)
- 2156_, [Linux]: compilation may fail on very old gcc compilers due to missing
``SPEED_UNKNOWN`` definition.  (patch by Amir Rossert)
- 2010_, [macOS]: on MacOS, arm64 ``IFM_1000_TX`` and ``IFM_1000_T`` are the
same value, causing a build failure.  (patch by Lawrence D'Anna)
- 2160_, [Windows]: Get Windows percent swap usage from performance counters.
(patch by Daniel Widdis)

5.9.3

=====

2022-10-18

**Enhancements**

- 2040_, [macOS]: provide wheels for arm64 architecture.  (patch by Matthieu
Darbois)

**Bug fixes**

- 2116_, [macOS], [critical]: `net_connections()`_ fails with RuntimeError.
- 2135_, [macOS]: `Process.environ()`_ may contain garbage data. Fix
out-of-bounds read around ``sysctl_procargs``.  (patch by Bernhard Urban-Forster)
- 2138_, [Linux], **[critical]**: can't compile psutil on Android due to
undefined ``ethtool_cmd_speed`` symbol.
- 2142_, [POSIX]: `net_if_stats()`_ 's ``flags`` on Python 2 returned unicode
instead of str.  (patch by Matthieu Darbois)
- 2147_, [macOS] Fix disk usage report on macOS 12+.  (patch by Matthieu Darbois)
- 2150_, [Linux] `Process.threads()`_ may raise ``NoSuchProcess``. Fix race
condition.  (patch by Daniel Li)
- 2153_, [macOS] Fix race condition in test_posix.TestProcess.test_cmdline.
(patch by Matthieu Darbois)

5.9.2

=====

2022-09-04

**Bug fixes**

- 2093_, [FreeBSD], **[critical]**: `pids()`_ may fail with ENOMEM. Dynamically
increase the ``malloc()`` buffer size until it's big enough.
- 2095_, [Linux]: `net_if_stats()`_ returns incorrect interface speed for
100GbE network cards.
- 2113_, [FreeBSD], **[critical]**: `virtual_memory()`_ may raise ENOMEM due to
missing ``include <sys/param.h>`` directive.  (patch by Peter Jeremy)
- 2128_, [NetBSD]: `swap_memory()`_ was miscalculated.  (patch by Thomas Klausner)

5.9.1

=====

2022-05-20

**Enhancements**

- 1053_: drop Python 2.6 support.  (patches by Matthieu Darbois and Hugo van
Kemenade)
- 2037_: Add additional flags to net_if_stats.
- 2050_, [Linux]: increase ``read(2)`` buffer size from 1k to 32k when reading
``/proc`` pseudo files line by line. This should help having more consistent
results.
- 2057_, [OpenBSD]: add support for `cpu_freq()`_.
- 2107_, [Linux]: `Process.memory_full_info()`_ (reporting process USS/PSS/Swap
memory) now reads ``/proc/pid/smaps_rollup`` instead of ``/proc/pids/smaps``,
which makes it 5 times faster.

**Bug fixes**

- 2048_: ``AttributeError`` is raised if ``psutil.Error`` class is raised
manually and passed through ``str``.
- 2049_, [Linux]: `cpu_freq()`_ erroneously returns ``curr`` value in GHz while
``min`` and ``max`` are in MHz.
- 2050_, [Linux]: `virtual_memory()`_ may raise ``ValueError`` if running in a
LCX container.
Links

@pyup-bot

Copy link
Copy Markdown
Collaborator Author

Closing this in favor of #1087

@pyup-bot pyup-bot closed this Jul 20, 2026
@fake-name
fake-name deleted the pyup-update-psutil-5.9.0-to-7.2.2 branch July 20, 2026 15:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant