All Versions
87
Latest Version
Avg Release Cycle
46 days
Latest Release
-

Changelog History
Page 1

  • v5.9.1 Changes

    2022-05-20

    ✨ Enhancements

    • πŸ‘ 1053_: drop Python 2.6 support. (patches by Matthieu Darbois and Hugo van Kemenade)
    • 🐧 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.
  • v5.9.0 Changes

    2021-12-29

    ✨ Enhancements

    • 🐧 1851_, [Linux]: cpu_freq()_ is slow on systems with many CPUs. Read current frequency values for all CPUs from /proc/cpuinfo instead of opening many files in /sys fs. (patch by marxin)
    • 1992_: NoSuchProcess_ message now specifies if the PID has been reused.
    • 1992_: error classes (NoSuchProcess, AccessDenied, etc.) now have a better formatted and separated __repr__ and __str__ implementations.
    • πŸ‘ 1996_, [BSD]: add support for MidnightBSD. (patch by Saeed Rasooli)
    • 🐧 1999_, [Linux]: disk_partitions()_: convert /dev/root device (an alias used on some Linux distros) to real root device path.
    • 2005_: PSUTIL_DEBUG mode now prints file name and line number of the debug messages coming from C extension modules.
    • 2042_: rewrite HISTORY.rst to use hyperlinks pointing to psutil API doc.

    πŸ› Bug fixes

    • 🍎 1456_, [macOS], [critical]: cpu_freq()_ min and max are set to 0 if can't be determined (instead of crashing).
    • 🍎 1512_, [macOS]: sometimes Process.connections()_ will crash with EOPNOTSUPP for one connection; this is now ignored.
    • 🏁 1598_, [Windows]: disk_partitions()_ only returns mountpoints on drives where it first finds one.
    • 1874_, [SunOS]: swap output error due to incorrect range.
    • 🍎 1892_, [macOS]: cpu_freq()_ broken on Apple M1.
    • 🍎 1901_, [macOS]: different functions, especially Process.open_files()_ and Process.connections(), could randomly raise AccessDenied because the internal buffer of proc_pidinfo(PROC_PIDLISTFDS) syscall was not big enough. We now dynamically increase the buffer size until it's big enough instead of giving up and raising AccessDenied_, which was a fallback to avoid crashing.
    • 🏁 1904_, [Windows]: OpenProcess fails with ERROR_SUCCESS due to GetLastError() called after sprintf(). (patch by alxchk)
    • 🐧 1913_, [Linux]: wait_procs()_ should catch subprocess.TimeoutExpired exception.
    • 🐧 1919_, [Linux]: sensors_battery()_ can raise TypeError on PureOS.
    • 🏁 1921_, [Windows]: swap_memory()_ shows committed memory instead of swap.
    • 🐧 1940_, [Linux]: psutil does not handle ENAMETOOLONG when accessing process file descriptors in procfs. (patch by Nikita Radchenko)
    • 1948_, [critical]: memoize_when_activated decorator is not thread-safe. (patch by Xuehai Pan)
    • 🏁 1953_, [Windows], [critical]: disk_partitions()_ crashes due to insufficient buffer len. (patch by MaWe2019)
    • 🏁 1965_, [Windows], [critical]: fix "Fatal Python error: deallocating None" when calling users()_ multiple times.
    • 🏁 1980_, [Windows]: 32bit / WoW64 processes fails to read Process.name()_ longer than 128 characters resulting in AccessDenied_. This is now fixed. (patch by PetrPospisil)
    • 1991_, [critical]: process_iter()_ is not thread safe and can raise TypeError if invoked from multiple threads.
    • 🍎 1956_, [macOS]: Process.cpu_times()_ reports incorrect timings on M1 machines. (patch by Olivier Dormond)
    • 🐧 2023_, [Linux]: cpu_freq()_ return order is wrong on systems with more than 9 CPUs.
  • v5.8.1 Changes

    XXXX-XX-XX

    ✨ Enhancements

    • 🐧 1851_: [Linux] cpu_freq() is slow on systems with many CPUs. Read current frequency values for all CPUs from /proc/cpuinfo instead of opening many files in /sys fs. (patch by marxin)
    • 1992_: NoSuchProcess message now specifies if the PID has been reused.
    • πŸ‘ 1992_: error classes (NoSuchProcess, AccessDenied, etc.) now have a better formatted and separated __repr__ and __str__ implementations.
    • πŸ‘ 1996_: add support for MidnightBSD. (patch by Saeed Rasooli)
    • 🐧 1999_: [Linux] disk_partitions(): convert "/dev/root" device (an alias used on some Linux distros) to real root device path.
    • 2005_: PSUTIL_DEBUG mode now prints file name and line number of the debug messages coming from C extension modules.

    πŸ› Bug fixes

    • 🍎 1456_: [macOS] psutil.cpu_freq()'s min and max are set to 0 if can't be determined (instead of crashing).
    • 🍎 1512_: [macOS] sometimes Process.connections() will crash with EOPNOTSUPP for one connection; this is now ignored.
    • 🏁 1598_: [Windows] psutil.disk_partitions() only returns mountpoints on drives where it first finds one
    • 1874_: [Solaris] swap output error due to incorrect range.
    • 🍎 1892_: [macOS] psutil.cpu_freq() broken on Apple M1.
    • 🍎 1901_: [macOS] different functions, especially process' open_files() and connections() methods, could randomly raise AccessDenied because the internal buffer of proc_pidinfo(PROC_PIDLISTFDS) syscall was not big enough. We now dynamically increase the buffer size until it's big enough instead of giving up and raising AccessDenied, which was a fallback to avoid crashing.
    • 🏁 1904_: [Windows] OpenProcess fails with ERROR_SUCCESS due to GetLastError() called after sprintf(). (patch by alxchk)
    • 🐧 1913_: [Linux] wait_procs seemingly ignoring timeout, TimeoutExpired thrown
    • 🐧 1919_: [Linux] sensors_battery() can raise TypeError on PureOS.
    • 🏁 1921_: [Windows] psutil.swap_memory() shows committed memory instead of swap
    • 🐧 1940_: [Linux] psutil does not handle ENAMETOOLONG when accessing process file descriptors in procfs. (patch by Nikita Radchenko)
    • 1948_: Process' memoize_when_activated decorator was not thread-safe. (patch by Xuehai Pan)
    • 🏁 1953_: [Windows] disk_partitions() crashes due to insufficient buffer len. (patch by MaWe2019)
    • 🏁 1965_: [Windows] fix "Fatal Python error: deallocating None" when calling psutil.users() multiple times.
    • 🏁 1980_: [Windows] 32bit / WOW64 processes fails to read process name longer than 128 characters resulting in AccessDenied. This is now fixed. (patch by PetrPospisil)
    • 1991_: process_iter() can raise TypeError if invoked from multiple threads (not thread-safe).
  • v5.8.0 Changes

    2020-12-19

    ✨ Enhancements

    • 1863_: disk_partitions()_ exposes 2 extra fields: maxfile and maxpath, which are the maximum file name and path name length.
    • 🏁 1872_, [Windows]: added support for PyPy 2.7.
    • 🍎 1879_: provide pre-compiled wheels for Linux and macOS (yey!).
    • πŸ‘· 1880_: get rid of Travis and Cirrus CI services (they are no longer free). CI testing is now done by GitHub Actions on Linux, macOS and FreeBSD (yes). AppVeyor is still being used for Windows CI.

    πŸ› Bug fixes

    • 🐧 1708_, [Linux]: get rid of sensors_temperatures()_ duplicates. (patch by Tim Schlueter).
    • 🏁 1839_, [Windows], [critical]: always raise AccessDenied_ instead of WindowsError when failing to query 64 processes from 32 bit ones by using NtWoW64 APIs.
    • 🏁 1866_, [Windows], [critical]: Process.exe(), Process.cmdline(), Process.environ()_ may raise "[WinError 998] Invalid access to memory location" on Python 3.9 / VS 2019.
    • 1874_, [SunOS]: wrong swap output given when encrypted column is present.
    • 🏁 1875_, [Windows], [critical]: Process.username()_ may raise ERROR_NONE_MAPPED if the SID has no corresponding account name. In this case AccessDenied_ is now raised.
    • 🍎 1886_, [macOS]: EIO error may be raised on Process.cmdline()_ and Process.environ(). Now it gets translated into AccessDenied.
    • 🏁 1887_, [Windows], [critical]: OpenProcess may fail with "[WinError 0] The operation completed successfully"." Turn it into AccessDenied_ or NoSuchProcess_ depending on whether the PID is alive.
    • 🍎 1891_, [macOS]: get rid of deprecated getpagesize().
  • v5.7.4 Changes

    XXXX-XX-XX

    ✨ Enhancements

    • 1863_: disk_partitions() exposes 2 extra fields: maxfile and maxpath, which are the maximum file name and path name length.
    • 🏁 1872_: [Windows] added support for PyPy 2.7.
    • 🍎 1879_: provide pre-compiled wheels for Linux and macOS (yey!).
    • πŸ‘· 1880_: get rid of Travis and Cirrus CI services (they are no longer free). CI testing is now done by GitHub Actions on Linux, macOS and FreeBSD (yes). AppVeyor is still being used for Windows CI.

    πŸ› Bug fixes

    • 🏁 1866_: [Windows] process exe(), cmdline(), environ() may raise "invalid access to memory location" on Python 3.9.
    • 1874_: [Solaris] wrong swap output given when encrypted column is present
  • v5.7.3 Changes

    2020-10-23

    ✨ Enhancements

    • πŸ‘ 809_, [FreeBSD]: add support for Process.rlimit()_.
    • πŸ‘ 893_, [BSD]: add support for Process.environ()_ (patch by Armin Gruner)
    • 1830_, [POSIX]: net_if_stats()_ isup also checks whether the NIC is running (meaning Wi-Fi or ethernet cable is connected). (patch by Chris Burger)
    • 🐧 1837_, [Linux]: improved battery detection and charge secsleft calculation (patch by aristocratos)

    πŸ› Bug fixes

    • 🐧 1620_, [Linux]: cpu_count()_ with logical=False result is incorrect on systems with more than one CPU socket. (patch by Vincent A. Arcila)
    • 🍎 1738_, [macOS]: Process.exe()_ may raise FileNotFoundError if process is still alive but the exe file which launched it got deleted.
    • 🍎 1791_, [macOS]: fix missing include for getpagesize().
    • 🏁 1823_, [Windows], [critical]: Process.open_files()_ may cause a segfault due to a NULL pointer.
    • 🐧 1838_, [Linux]: sensors_battery()_: if percent can be determined but not the remaining values, still return a result instead of None. (patch by aristocratos)
  • v5.7.2 Changes

    2020-07-15

    πŸ› Bug fixes

    • wheels for 2.7 were inadvertently deleted.
  • v5.7.1 Changes

    2020-07-15

    ✨ Enhancements

    • βœ… 1729_: parallel tests on UNIX (make test-parallel). They're twice as fast!
    • πŸ— 1741_: "make build/install" is now run in parallel and it's about 15% faster on UNIX.
    • 🚦 1747_: Process.wait() on POSIX returns an enum, showing the negative signal which was used to terminate the process:: >>> import psutil >>> p = psutil.Process(9891) >>> p.terminate() >>> p.wait()
    • 1747_: Process.wait() return value is cached so that the exit code can be retrieved on then next call.
    • 1747_: Process provides more info about the process on str() and repr() (status and exit code):: >>> proc psutil.Process(pid=12739, name='python3', status='terminated', exitcode=, started='15:08:20')
    • βœ… 1757_: memory leak tests are now stable.
    • 🏁 1768_: [Windows] added support for Windows Nano Server. (contributed by Julien Lebot)

    πŸ› Bug fixes

    • 🐧 1726_: [Linux] cpu_freq() parsing should use spaces instead of tabs on ia64. (patch by MichaΕ‚ GΓ³rny)
    • 🐧 1760_: [Linux] Process.rlimit() does not handle long long type properly.
    • 🍎 1766_: [macOS] NoSuchProcess may be raised instead of ZombieProcess.
    • 1781_: fix signature of callback function for getloadavg(). (patch by Ammar Askar)
  • v5.7.0 Changes

    February 18, 2020

    2020-02-18

    ✨ Enhancements

    • ⚑️ 1637_, [SunOS]: add partial support for old SunOS 5.10 Update 0 to 3.
    • 🐧 1648_, [Linux]: sensors_temperatures()_ looks into an additional /sys/device/ directory for additional data. (patch by Javad Karabi)
    • 🏁 1652_, [Windows]: dropped support for Windows XP and Windows Server 2003. Minimum supported Windows version now is Windows Vista.
    • πŸ‘· 1671_, [FreeBSD]: add CI testing/service for FreeBSD (Cirrus CI).
    • 🏁 1677_, [Windows]: Process.exe()_ will succeed for all process PIDs (instead of raising AccessDenied_).
    • 🏁 1679_, [Windows]: net_connections()_ and Process.connections()_ are 10% faster.
    • πŸ‘· 1682_, [PyPy]: added CI / test integration for PyPy via Travis.
    • 🏁 1686_, [Windows]: added support for PyPy on Windows.
    • 🏁 1693_, [Windows]: boot_time(), Process.create_time() and users()_'s login time now have 1 micro second precision (before the precision was of 1 second).

    πŸ› Bug fixes

    • 1538_, [NetBSD]: Process.cwd()_ may return ENOENT instead of NoSuchProcess_.
    • 🐧 1627_, [Linux]: Process.memory_maps()_ can raise KeyError.
    • 1642_, [SunOS]: querying basic info for PID 0 results in FileNotFoundError.
    • 1646_, [FreeBSD], [critical]: many Process_ methods may cause a segfault due to a backward incompatible change in a C type on FreeBSD 12.0.
    • 🏁 1656_, [Windows]: Process.memory_full_info()_ raises AccessDenied_ even for the current user and os.getpid().
    • 🏁 1660_, [Windows]: Process.open_files()_ complete rewrite + check of errors.
    • 🏁 1662_, [Windows], [critical]: Process.exe()_ may raise "[WinError 0] The operation completed successfully".
    • 🐧 1665_, [Linux]: disk_io_counters()_ does not take into account extra fields added to recent kernels. (patch by Mike Hommey)
    • 1672_: use the right C type when dealing with PIDs (int or long). Thus far (long) was almost always assumed, which is wrong on most platforms.
    • 1673_, [OpenBSD]: Process.connections(), Process.num_fds() and Process.threads()_ returned improper exception if process is gone.
    • 1674_, [SunOS]: disk_partitions()_ may raise OSError.
    • 🐧 1684_, [Linux]: disk_io_counters()_ may raise ValueError on systems not having /proc/diskstats.
    • 🐧 1695_, [Linux]: could not compile on kernels <= 2.6.13 due to PSUTIL_HAVE_IOPRIO not being defined. (patch by Anselm Kruis)
  • v5.6.8 Changes

    XXXX-XX-XX

    ✨ Enhancements

    • 🐧 1648_: [Linux] sensors_temperatures() looks into an additional /sys/device/ directory for additional data. (patch by Javad Karabi)
    • 🏁 1652_: [Windows] dropped support for Windows XP and Windows Server 2003. Minimum supported Windows version now is Windows Vista.

    πŸ› Bug fixes

    • ⚑️ 1637_: [SunOS] Add partial support for old SunOS 5.10 Update 0 to 3.
    • 1642_: [SunOS] querying basic info for PID 0 results in FileNotFoundError.
    • 1646_: [FreeBSD] many Process methods may cause a segfault on FreeBSD 12.0 due to a backward incompatible change in a C type introduced in 12.0.
    • 🏁 1656_: [Windows] Process.memory_full_info() raises AccessDenied even for the current user and os.getpid().
    • 🏁 1660_: [Windows] Process.open_files() complete rewrite + check of errors.
    • 🏁 1662_: [Windows] process exe() may raise WinError 0.