5.6.5
**Bug fixes**
- remove pyproject.toml as it was causing installation issues.
5.6.4
**Enhancements**
- [Linux] added Process.cpu_times().iowait counter, which is the time
spent waiting for blocking I/O to complete.
- add PEP 517/8 build backend and requirements specification for better
pip integration.
**Bug fixes**
- [Windows] Process' cmdline(), environ() or cwd() may occasionally fail
with ERROR_PARTIAL_COPY which now gets translated to AccessDenied.
- [Linux] cpu_affinity() segfaults on CentOS 5 / manylinux.
cpu_affinity() support for CentOS 5 was removed.
- [AIX] compilation error on AIX 7.2 due to 32 vs 64 bit differences.
- 'type' and 'family' fields returned by net_connections() are not
always turned into enums.
- [NetBSD] process cmdline() erroneously raise ZombieProcess error if
cmdline has non encodable chars.
- usage percent may be rounded to 0 on Python 2.
- [Windows] getloadavg() math for calculating 5 and 15 mins values is
incorrect.
- [Linux] use CC compiler env var if defined.
- [Windows] `NtWow64*` syscalls fail to raise the proper error code
- [OSX] calling close() (in C) on possible negative integers.
- [SunOS] compilation fails on SunOS 5.10.
pkgsrc changes:
- Remove no longer needed patch hunks (applied upstream)
Changes:
5.6.3
=====
2019-06-11
Enhancements
------------
- 1494: [AIX] added support for Process.environ(). (patch by Arnon Yaari)
Bug fixes
---------
- 1276: [AIX] can't get whole cmdline(). (patch by Arnon Yaari)
- 1501: [Windows] Process cmdline() and exe() raise unhandled "WinError 1168
element not found" exceptions for "Registry" and "Memory Compression" psuedo
processes on Windows 10.
- 1526: [NetBSD] process cmdline() could raise MemoryError. (patch by
Kamil Rytarowski)
5.6.2
**Enhancements**
- 604_: [UNIX, Windows] add new psutil.getloadavg() returning system load
- 1404_: [Linux] cpu_count(logical=False) uses a second method (read from
/sys/devices/system/cpu/cpu[0-9]/topology/core_id) in order to determine
the number of physical CPUs in case /proc/cpuinfo does not provide this info.
- 1458_: provide coloured test output. Also show failures on KeyboardInterrupt.
- 1464_: various docfixes (always point to python3 doc, fix links, etc.).
- 1473_: [Windows] process IO priority (ionice()) values are now exposed as 4
new constants: IOPRIO_VERYLOW, IOPRIO_LOW, IOPRIO_NORMAL, IOPRIO_HIGH.
Also it was not possible to set high I/O priority (not it is).
- 1478_: add make command to re-run tests failed on last run.
average calculation.
**Bug fixes**
- 1223_: [Windows] boot_time() may return value on Windows XP.
- 1456_: [Linux] cpu_freq() returns None instead of 0.0 when min/max not
available
- 1462_: [Linux] (tests) make tests invariant to LANG setting
- 1463_: cpu_distribution.py script was broken.
- 1470_: [Linux] disk_partitions(): fix corner case when /etc/mtab doesn't
exist.
- 1471_: [SunOS] Process name() and cmdline() can return SystemError.
- 1472_: [Linux] cpu_freq() does not return all CPUs on Rasbperry pi 3.
- 1474_: fix formatting of psutil.tests() which mimicks 'ps aux' output.
- 1475_: [Windows] OSError.winerror attribute wasn't properly checked resuling
in WindowsError being raised instead of AccessDenied.
- 1477_: [Windows] wrong or absent error handling for private NTSTATUS Windows
APIs. Different process methods were affected by this.
- 1480_: [Windows] psutil.cpu_count(logical=False) could cause a crash due to
fixed read violation.
- 1486_: [AIX, SunOS] AttributeError when interacting with Process methods
involved into oneshot() context.
- 1491_: [SunOS] net_if_addrs(): free() ifap struct on error.
- 1493_: [Linux] cpu_freq(): handle the case where
/sys/devices/system/cpu/cpufreq/ exists but is empty.
5.6.1
Bug fixes
- 1329_: [AIX] psutil doesn't compile on AIX 6.1. (patch by Arnon Yaari)
- 1448_: [Windows] crash on import due to rtlIpv6AddressToStringA not available
on Wine.
- 1451_: [Windows] Process.memory_full_info() segfaults. NtQueryVirtualMemory
is now used instead of QueryWorkingSet to calculate USS memory.
5.6.0
Enhancements
- 1379_: [Windows] Process suspend() and resume() now use NtSuspendProcess
and NtResumeProcess instead of stopping/resuming all threads of a process.
This is faster and more reliable (aka this is what ProcessHacker does).
- 1420_: [Windows] in case of exception disk_usage() now also shows the path
name.
- 1422_: [Windows] Windows APIs requiring to be dynamically loaded from DLL
libraries are now loaded only once on startup (instead of on per function
call) significantly speeding up different functions and methods.
- 1426_: [Windows] PAGESIZE and number of processors is now calculated on
startup.
- 1428_: in case of error, the traceback message now shows the underlying C
function called which failed.
- 1433_: new Process.parents() method. (idea by Ghislain Le Meur)
- 1437_: pids() are returned in sorted order.
- 1442_: python3 is now the default interpreter used by Makefile.
Bug fixes
- 1353_: process_iter() is now thread safe (it rarely raised TypeError).
- 1394_: [Windows] Process name() and exe() may erroneously return "Registry".
QueryFullProcessImageNameW is now used instead of GetProcessImageFileNameW
in order to prevent that.
- 1411_: [BSD] lack of Py_DECREF could cause segmentation fault on process
instantiation.
- 1419_: [Windows] Process.environ() raises NotImplementedError when querying
a 64-bit process in 32-bit-WoW mode. Now it raises AccessDenied.
- 1427_: [OSX] Process cmdline() and environ() may erroneously raise OSError
on failed malloc().
- 1429_: [Windows] SE DEBUG was not properly set for current process. It is
now, and it should result in less AccessDenied exceptions for low-pid
processes.
- 1432_: [Windows] Process.memory_info_ex()'s USS memory is miscalculated
because we're not using the actual system PAGESIZE.
- 1439_: [NetBSD] Process.connections() may return incomplete results if using
oneshot().
- 1447_: original exception wasn't turned into NSP/AD exceptions when using
Process.oneshot() ctx manager.
Incompatible API changes
- 1291_: [OSX] Process.memory_maps() was removed because inherently broken
(segfault) for years.
5.5.1
Enhancements
- [Windows] on Windows >= 8.1 if Process.cmdline() fails due to
ERROR_ACCESS_DENIED attempt using NtQueryInformationProcess +
ProcessCommandLineInformation. (patch by EccoTheFlintstone)
Bug fixes
- [Windows] Process.exe() returns "[Error 0] The operation completed
successfully" when Python process runs in "Virtual Secure Mode".
- psutil exceptions' repr() show the internal private module path.
- [AIX] psutil won't compile on AIX 7.1 due to missing header.
5.5.0
Enhancements
- [FreeBSD] added support for sensors_temperatures().
- [FreeBSD] added support for CPU frequency.
Bug fixes
- Process.oneshot() is now thread safe.
- [Linux] disk_io_counters() fails on Linux kernel 4.18+.
- [Linux] Process' memory_maps() and io_counters() method are no longer
exposed if not supported by the kernel.
- [Windows] fix psutil.Process().ionice(...) mismatch.
- [Windows] improper usage of CloseHandle() may lead to override the
original error code when raising an exception.
- incorrect handling of cache in Process.oneshot() context causes
Process instances to return incorrect results.
- [Windows] OpenProcess() now uses PROCESS_QUERY_LIMITED_INFORMATION
access rights wherever possible, resulting in less AccessDenied exceptions
being thrown for system processes.
- [Windows] check if variable is NULL before free()ing it.
5.4.8:
Enhancements
* [Linux] cpu_freq() is now implemented by parsing /proc/cpuinfo in case /sys/devices/system/cpu/* filesystem is not available.
* [Linux] psutil.sensors_temperatures() now parses /sys/class/thermal in case /sys/class/hwmon fs is not available (e.g. Raspberry Pi).
* [Posix] better compilation support when using g++ instead of gcc.
Bug fixes
* do not print exception on import time in case cpu_times() fails.
* [Linux] Process.io_counters() may raise ValueError.
* [OSX] available and used memory (psutil.virtual_memory()) metrics are not accurate.
* [Windows] psutil.Process().connections() may sometimes fail with intermittent 0xC0000001.
* [Linux] disk_partitions() does not honour PROCFS_PATH.
* [AIX] system CPU times (psutil.cpu_times()) were being reported with ticks unit as opposed to seconds.
* [OSX] psutil debug messages are erroneously printed all the time.
* [SunOS] net_connections() returns an empty list.
5.4.7:
Enhancements
* [macOS] psutil.OSX constant is now deprecated in favor of new psutil.MACOS.
* [Linux] added psutil.STATUS_PARKED constant for Process.status().
* [Linux] add disk_io_counters() dual implementation relying on /sys/block filesystem in case /proc/diskstats is not available.
Bug fixes
* [macOS] Process.memory_maps() may fail with EINVAL due to poor task_for_pid() syscall. AccessDenied is now raised instead.
* [macOS] Process.threads() incorrectly return microseconds instead of seconds.
* [Linux, macOS, BSD] net_if_stats() may return ENODEV.
* [Windows] psutil.Process().connections() may sometime fail with MemoryError.
* [Linux] disk_io_stats() may report inflated r/w bytes values.
* [Linux] Process.status() is unable to recognize "idle" and "parked" statuses (returns '?').
* [Linux] disk_io_counters() can report inflated IO counters due to erroneously counting base disk device and its partition(s) twice.
* [Linux] sensors_temperatures() may fail with ValueError.
5.4.6:
Bug fixes
- [Windows] Process.username() may cause a segfault (Python interpreter
crash).
- net_if_addr() namedtuple's name has been renamed from "snic" to
"snicaddr".
- [Linux] there was a small chance Process.children() may swallow
AccessDenied exceptions.
Enhancements since 5.2.2:
- disk_io_counters() and net_io_counters() numbers no longer wrap
(restart from 0). Introduced a new "nowrap" argument.
- psutil.net_connections() and psutil.Process.connections() "laddr"
and "raddr" are now named tuples.
- swap_memory() now relies on /proc/meminfo instead of sysinfo()
syscall so that it can be used in conjunction with PROCFS_PATH in
order to retrieve memory info about Linux containers such as Docker
and Heroku.
- psutil.users() provides a new "pid" field.
- process_iter() accepts two new parameters in order to invoke
Process.as_dict(): "attrs" and "ad_value". With this you can iterate
over all processes in one shot without needing to catch
NoSuchProcess and do list/dict comprehensions.
- implemented full unicode support.
- disk_usage() on Python 3 is now able to accept bytes.
- test suite now enables all warnings by default.
- source distribution is dynamically generated so that it only
includes relevant files.
- introduced PSUTIL_DEBUG environment variable which can be set in
order to print useful debug messages on stderr (useful in case of
nasty errors).
- added support for sensors_battery() on OSX.
- Process.children() is 2x faster on UNIX and 2.4x faster on Linux.
- deprecated method Process.memory_info_ex() now warns by using
FutureWarning instead of DeprecationWarning.
Bug fixes
1000: fixed some setup.py warnings.
1002: [SunOS] remove C macro which will not be available on new Solaris versions. (patch by Danek Duvall)
1004: [Linux] Process.io_counters() may raise ValueError.
1006: [Linux] cpu_freq() may return None on some Linux versions does not support the function; now the function is not declared instead.
1009: [Linux] sensors_temperatures() may raise OSError.
1010: [Linux] virtual_memory() may raise ValueError on Ubuntu 14.04.
Changelog:
5.0.1
=====
*2016-12-21*
**Enhancements**
- 939_: tar.gz distribution went from 1.8M to 258K.
- 811_: [Windows] provide a more meaningful error message if trying to use
psutil on unsupported Windows XP.
**Bug fixes**
- 609_: [SunOS] psutil does not compile on Solaris 10.
- 936_: [Windows] fix compilation error on VS 2013 (patch by Max Bélanger).
- 940_: [Linux] cpu_percent() and cpu_times_percent() was calculated
incorrectly as "iowait", "guest" and "guest_nice" times were not properly
taken into account.
- 944_: [OpenBSD] psutil.pids() was omitting PID 0.
5.0.0
=====
*2016-11-06*
**Enhncements**
- 799_: new Process.oneshot() context manager making Process methods around
+2x faster in general and from +2x to +6x faster on Windows.
- 943_: better error message in case of version conflict on import.
**Bug fixes**
- 932_: [NetBSD] net_connections() and Process.connections() may fail without
raising an exception.
- 933_: [Windows] memory leak in cpu_stats() and WindowsService.description().
4.4.2
=====
*2016-10-26*
**Bug fixes**
- 931_: psutil no longer compiles on Solaris.
4.4.1
=====
*2016-10-25*
**Bug fixes**
- 927_: ``Popen.__del__`` may cause maximum recursion depth error.
4.4.0
=====
*2016-10-23*
**Enhancements**
- 874_: [Windows] net_if_addrs() returns also the netmask.
- 887_: [Linux] virtual_memory()'s 'available' and 'used' values are more
precise and match "free" cmdline utility. "available" also takes into
account LCX containers preventing "available" to overflow "total".
- 891_: procinfo.py script has been updated and provides a lot more info.
**Bug fixes**
- 514_: [OSX] possibly fix Process.memory_maps() segfault (critical!).
- 783_: [OSX] Process.status() may erroneously return "running" for zombie
processes.
- 798_: [Windows] Process.open_files() returns and empty list on Windows 10.
- 825_: [Linux] cpu_affinity; fix possible double close and use of unopened
socket.
- 880_: [Windows] Handle race condition inside psutil_net_connections.
- 885_: ValueError is raised if a negative integer is passed to cpu_percent()
functions.
- 892_: [Linux] Process.cpu_affinity([-1]) raise SystemError with no error
set; now ValueError is raised.
- 906_: [BSD] disk_partitions(all=False) returned an empty list. Now the
argument is ignored and all partitions are always returned.
- 907_: [FreeBSD] Process.exe() may fail with OSError(ENOENT).
- 908_: [OSX, BSD] different process methods could errounesuly mask the real
error for high-privileged PIDs and raise NoSuchProcess and AccessDenied
instead of OSError and RuntimeError.
- 909_: [OSX] Process open_files() and connections() methods may raise
OSError with no exception set if process is gone.
- 916_: [OSX] fix many compilation warnings.
4.3.1
=====
*2016-09-01*
**Enhancements**
- 881_: "make install" now works also when using a virtual env.
**Bug fixes**
- 854_: Process.as_dict() raises ValueError if passed an erroneous attrs name.
- 857_: [SunOS] Process cpu_times(), cpu_percent(), threads() amd memory_maps()
may raise RuntimeError if attempting to query a 64bit process with a 32bit
python. "Null" values are returned as a fallback.
- 858_: Process.as_dict() should not return memory_info_ex() because it's
deprecated.
- 863_: [Windows] memory_map truncates addresses above 32 bits
- 866_: [Windows] win_service_iter() and services in general are not able to
handle unicode service names / descriptions.
- 869_: [Windows] Process.wait() may raise TimeoutExpired with wrong timeout
unit (ms instead of sec).
- 870_: [Windows] Handle leak inside psutil_get_process_data.
4.3.0
=====
*2016-06-18*
**Enhancements**
- 819_: [Linux] different speedup improvements:
Process.ppid() is 20% faster
Process.status() is 28% faster
Process.name() is 25% faster
Process.num_threads is 20% faster on Python 3
**Bug fixes**
- 810_: [Windows] Windows wheels are incompatible with pip 7.1.2.
- 812_: [NetBSD] fix compilation on NetBSD-5.x.
- 823_: [NetBSD] virtual_memory() raises TypeError on Python 3.
- 829_: [UNIX] psutil.disk_usage() percent field takes root reserved space
into account.
- 816_: [Windows] fixed net_io_counter() values wrapping after 4.3GB in
Windows Vista (NT 6.0) and above using 64bit values from newer win APIs.
4.2.0
=====
*2016-05-14*
**Enhancements**
- 795_: [Windows] new APIs to deal with Windows services: win_service_iter()
and win_service_get().
- 800_: [Linux] psutil.virtual_memory() returns a new "shared" memory field.
- 819_: [Linux] speedup /proc parsing:
- Process.ppid() is 20% faster
- Process.status() is 28% faster
- Process.name() is 25% faster
- Process.num_threads is 20% faster on Python 3
**Bug fixes**
- 797_: [Linux] net_if_stats() may raise OSError for certain NIC cards.
- 813_: Process.as_dict() should ignore extraneous attribute names which gets
attached to the Process instance.
4.1.0 - 2016-03-12
==================
**Enhancements**
- #777: [Linux] Process.open_files() on Linux return 3 new fields: position,
mode and flags.
- #779: Process.cpu_times() returns two new fields, 'children_user' and
'children_system' (always set to 0 on OSX and Windows).
- #789: [Windows] psutil.cpu_times() return two new fields: "interrupt" and
"dpc". Same for psutil.cpu_times_percent().
- #792: new psutil.cpu_stats() function returning number of CPU ctx switches
interrupts, soft interrupts and syscalls.
**Bug fixes**
- #774: [FreeBSD] net_io_counters() dropout is no longer set to 0 if the kernel
provides it.
- #776: [Linux] Process.cpu_affinity() may erroneously raise NoSuchProcess.
(patch by wxwright)
- #780: [OSX] psutil does not compile with some gcc versions.
- #786: net_if_addrs() may report incomplete MAC addresses.
- #788: [NetBSD] virtual_memory()'s buffers and shared values were set to 0.
- #790: [OSX] psutil won't compile on OSX 10.4.
4.0.0 - 2016-02-17
==================
**Enhancements**
- #523: [Linux, FreeBSD] disk_io_counters() return a new "busy_time" field.
- #660: [Windows] make.bat is smarter in finding alternative VS install
locations. (patch by mpderbec)
- #732: Process.environ(). (patch by Frank Benkstein)
- #753: [Linux, OSX, Windows] Process USS and PSS (Linux) "real" memory stats.
(patch by Eric Rahm)
- #755: Process.memory_percent() "memtype" parameter.
- #758: tests now live in psutil namespace.
- #760: expose OS constants (psutil.LINUX, psutil.OSX, etc.)
- #756: [Linux] disk_io_counters() return 2 new fields: read_merged_count and
write_merged_count.
- #762: new scripts/procsmem.py script.
**Bug fixes**
- #685: [Linux] virtual_memory() provides wrong results on systems with a lot
of physical memory.
- #704: [Solaris] psutil does not compile on Solaris sparc.
- #734: on Python 3 invalid UTF-8 data is not correctly handled for process
name(), cwd(), exe(), cmdline() and open_files() methods resulting in
UnicodeDecodeError exceptions. 'surrogateescape' error handler is now
used as a workaround for replacing the corrupted data.
- #737: [Windows] when the bitness of psutil and the target process was
different cmdline() and cwd() could return a wrong result or incorrectly
report an AccessDenied error.
- #741: [OpenBSD] psutil does not compile on mips64.
- #751: [Linux] fixed call to Py_DECREF on possible Null object.
- #754: [Linux] cmdline() can be wrong in case of zombie process.
- #759: [Linux] Process.memory_maps() may return paths ending with " (deleted)"
- #761: [Windows] psutil.boot_time() wraps to 0 after 49 days.
- #764: [NetBSD] fix compilation on NetBSD-6.x.
- #766: [Linux] net_connections() can't handle malformed /proc/net/unix file.
- #767: [Linux] disk_io_counters() may raise ValueError on 2.6 kernels and it's
broken on 2.4 kernels.
- #770: [NetBSD] disk_io_counters() metrics didn't update.
* Upstream supports NetBSD and remove local patches
Changelog:
3.4.2 - 2016-01-20
==================
**Enhancements**
- #728: [Solaris] exposed psutil.PROCFS_PATH constant to change the default
location of /proc filesystem.
**Bug fixes**
- #730: [FreeBSD] psutil.virtual_memory() crashes.
3.4.1 - 2016-01-15
==================
**Enhancements**
- #557: [NetBSD] added NetBSD support. (contributed by Ryo Onodera and
Thomas Klausner)
- #708: [Linux] psutil.net_connections() and Process.connections() on Python 2
can be up to 3x faster in case of many connections.
Also psutil.Process.memory_maps() is slightly faster.
- #718: process_iter() is now thread safe.
**Bug fixes**
- #714: [OpenBSD] virtual_memory().cached value was always set to 0.
- #715: don't crash at import time if cpu_times() fail for some reason.
- #717: [Linux] Process.open_files fails if deleted files still visible.
- #722: [Linux] swap_memory() no longer crashes if sin/sout can't be determined
due to missing /proc/vmstat.
- #724: [FreeBSD] virtual_memory().total is slightly incorrect.
* Add preliminary NetBSD support code.
It is sufficient to run letsencrypt python client on NetBSD.
Changelog:
3.3.0 - 2015-11-25
==================
**Enhancements**
- #558: [Linux] exposed psutil.PROCFS_PATH constant to change the default
location of /proc filesystem.
- #615: [OpenBSD] added OpenBSD support. (contributed by Landry Breuil)
**Bug fixes**
- #692: [UNIX] Process.name() is no longer cached as it may change.
3.2.2 - 2015-10-04
==================
**Bug fixes**
- #517: [SunOS] net_io_counters failed to detect network interfaces
correctly on Solaris 10
- #541: [FreeBSD] disk_io_counters r/w times were expressed in seconds instead
of milliseconds. (patch by dasumin)
- #610: [SunOS] fix build and tests on Solaris 10
- #623: [Linux] process or system connections raises ValueError if IPv6 is not
supported by the system.
- #678: [Linux] can't install psutil due to bug in setup.py.
- #688: [Windows] compilation fails with MSVC 2015, Python 3.5. (patch by
Mike Sarahan)
3.2.1 - 2015-09-03
==================
**Bug fixes**
- #677: [Linux] can't install psutil due to bug in setup.py.
3.2.0 - 2015-09-02
==================
**Enhancements**
- #644: [Windows] added support for CTRL_C_EVENT and CTRL_BREAK_EVENT signals
to use with Process.send_signal().
- #648: CI test integration for OSX. (patch by Jeff Tang)
- #663: [UNIX] net_if_addrs() now returns point-to-point (VPNs) addresses.
- #655: [Windows] different issues regarding unicode handling were fixed. On
Python 2 all APIs returning a string will now return an encoded version of it
by using sys.getfilesystemencoding() codec. The APIs involved are:
- psutil.net_if_addrs()
- psutil.net_if_stats()
- psutil.net_io_counters()
- psutil.Process.cmdline()
- psutil.Process.name()
- psutil.Process.username()
- psutil.users()
**Bug fixes**
- #513: [Linux] fixed integer overflow for RLIM_INFINITY.
- #641: [Windows] fixed many compilation warnings. (patch by Jeff Tang)
- #652: [Windows] net_if_addrs() UnicodeDecodeError in case of non-ASCII NIC
names.
- #655: [Windows] net_if_stats() UnicodeDecodeError in case of non-ASCII NIC
names.
- #659: [Linux] compilation error on Suse 10. (patch by maozguttman)
- #664: [Linux] compilation error on Alpine Linux. (patch by Bart van Kleef)
- #670: [Windows] segfgault of net_if_addrs() in case of non-ASCII NIC names.
(patch by sk6249)
- #672: [Windows] compilation fails if using Windows SDK v8.0. (patch by
Steven Winfield)
- #675: [Linux] net_connections(); UnicodeDecodeError may occur when listing
UNIX sockets.
3.1.1 - 2015-07-15
==================
**Bug fixes**
- #603: [Linux] ionice_set value range is incorrect. (patch by spacewander)
- #645: [Linux] psutil.cpu_times_percent() may produce negative results.
- #656: 'from psutil import *' does not work.
3.1.0 - 2015-07-15
==================
**Enhancements**
- #534: [Linux] disk_partitions() added support for ZFS filesystems.
- #646: continuous tests integration for Windows with
https://ci.appveyor.com/project/giampaolo/psutil.
- #647: new dev guide:
https://github.com/giampaolo/psutil/blob/master/DEVGUIDE.rst
- #651: continuous code quality test integration with
https://scrutinizer-ci.com/g/giampaolo/psutil/
**Bug fixes**
- #340: [Windows] Process.open_files() no longer hangs. Instead it uses a
thred which times out and skips the file handle in case it's taking too long
to be retrieved. (patch by Jeff Tang, PR #597)
- #627: [Windows] Process.name() no longer raises AccessDenied for pids owned
by another user.
- #636: [Windows] Process.memory_info() raise AccessDenied.
- #637: [UNIX] raise exception if trying to send signal to Process PID 0 as it
will affect os.getpid()'s process group instead of PID 0.
- #639: [Linux] Process.cmdline() can be truncated.
- #640: [Linux] *connections functions may swallow errors and return an
incomplete list of connnections.
- #642: repr() of exceptions is incorrect.
- #653: [Windows] Add inet_ntop function for Windows XP to support IPv6.
- #641: [Windows] Replace deprecated string functions with safe equivalents.
3.0.1 - 2015-06-18
==================
**Bug fixes**
- #632: [Linux] better error message if cannot parse process UNIX connections.
- #634: [Linux] Proces.cmdline() does not include empty string arguments.
- #635: [UNIX] crash on module import if 'enum' package is installed on python
< 3.4.
3.0.0 - 2015-06-13
==================
**Enhancements**
- #250: new psutil.net_if_stats() returning NIC statistics (isup, duplex,
speed, MTU).
- #376: new psutil.net_if_addrs() returning all NIC addresses a-la ifconfig.
- #469: on Python >= 3.4 ``IOPRIO_CLASS_*`` and ``*_PRIORITY_CLASS`` constants
returned by psutil.Process' ionice() and nice() methods are enums instead of
plain integers.
- #581: add .gitignore. (patch by Gabi Davar)
- #582: connection constants returned by psutil.net_connections() and
psutil.Process.connections() were turned from int to enums on Python > 3.4.
- #587: Move native extension into the package.
- #589: Process.cpu_affinity() accepts any kind of iterable (set, tuple, ...),
not only lists.
- #594: all deprecated APIs were removed.
- #599: [Windows] process name() can now be determined for all processes even
when running as a limited user.
- #602: pre-commit GIT hook.
- #629: enhanced support for py.test and nose test discovery and tests run.
- #616: [Windows] Add inet_ntop function for Windows XP.
**Bug fixes**
- #428: [all UNIXes except Linux] correct handling of zombie processes;
introduced new ZombieProcess exception class.
- #512: [BSD] fix segfault in net_connections().
- #555: [Linux] psutil.users() correctly handles ":0" as an alias for
"localhost"
- #579: [Windows] Fixed open_files() for PID>64K.
- #579: [Windows] fixed many compiler warnings.
- #585: [FreeBSD] net_connections() may raise KeyError.
- #586: [FreeBSD] cpu_affinity() segfaults on set in case an invalid CPU
number is provided.
- #593: [FreeBSD] Process().memory_maps() segfaults.
- #606: Process.parent() may swallow NoSuchProcess exceptions.
- #611: [SunOS] net_io_counters has send and received swapped
- #614: [Linux]: cpu_count(logical=False) return the number of physical CPUs
instead of physical cores.
- #618: [SunOS] swap tests fail on Solaris when run as normal user
- #628: [Linux] Process.name() truncates process name in case it contains
spaces or parentheses.
2.2.1 - 2015-02-02
==================
**Bug fixes**
- #496: [Linux] fix "ValueError: ambiguos inode with multiple PIDs references"
(patch by Bruno Binet)
2.2.0 - 2015-01-06
==================
**Enhancements**
- #521: drop support for Python 2.4 and 2.5.
- #553: new examples/pstree.py script.
- #564: C extension version mismatch in case the user messed up with psutil
installation or with sys.path is now detected at import time.
- #568: New examples/pidof.py script.
- #569: [FreeBSD] add support for process CPU affinity.
**Bug fixes**
- #496: [Solaris] can't import psutil.
- #547: [UNIX] Process.username() may raise KeyError if UID can't be resolved.
- #551: [Windows] get rid of the unicode hack for net_io_counters() NIC names.
- #556: [Linux] lots of file handles were left open.
- #561: [Linux] net_connections() might skip some legitimate UNIX sockets.
(patch by spacewander)
- #565: [Windows] use proper encoding for psutil.Process.username() and
psutil.users(). (patch by Sylvain Mouquet)
- #567: [Linux] in the alternative implementation of CPU affinity PyList_Append
and Py_BuildValue return values are not checked.
- #569: [FreeBSD] fix memory leak in psutil.cpu_count(logical=False).
- #571: [Linux] Process.open_files() might swallow AccessDenied exceptions and
return an incomplete list of open files.
Problems found with existing digests:
Package memconf distfile memconf-2.16/memconf.gz
b6f4b736cac388dddc5070670351cf7262aba048 [recorded]
95748686a5ad8144232f4d4abc9bf052721a196f [calculated]
Problems found locating distfiles:
Package dc-tools: missing distfile dc-tools/abs0-dc-burn-netbsd-1.5-0-gae55ec9
Package ipw-firmware: missing distfile ipw2100-fw-1.2.tgz
Package iwi-firmware: missing distfile ipw2200-fw-2.3.tgz
Package nvnet: missing distfile nvnet-netbsd-src-20050620.tgz
Package syslog-ng: missing distfile syslog-ng-3.7.2.tar.gz
Otherwise, existing SHA1 digests verified and found to be the same on
the machine holding the existing distfiles (morden). All existing
SHA1 digests retained for now as an audit trail.
2.1.2 - 2014-09-21
==================
**Enhancements**
- #407: project moved from Google Code to Github; code moved from Mercurial
to Git.
- #492: use tox to run tests on multiple python versions. (patch by msabramo)
- #505: [Windows] distribution as wheel packages.
- #511: new examples/ps.py sample code.
**Bug fixes**
- #340: [Windows] Process.get_open_files() no longer hangs. (patch by
Jeff Tang)
- #501: [Windows] disk_io_counters() may return negative values.
- #503: [Linux] in rare conditions Process exe(), open_files() and
connections() methods can raise OSError(ESRCH) instead of NoSuchProcess.
- #504: [Linux] can't build RPM packages via setup.py
- #506: [Linux] python 2.4 support was broken.
- #522: [Linux] Process.cpu_affinity() might return EINVAL. (patch by David
Daeschler)
- #529: [Windows] Process.exe() may raise unhandled WindowsError exception
for PIDs 0 and 4. (patch by Jeff Tang)
- #530: [Linux] psutil.disk_io_counters() may crash on old Linux distros
(< 2.6.5) (patch by Yaolong Huang)
- #533: [Linux] Process.memory_maps() may raise TypeError on old Linux distros.
2.1.0 - 2014-04-08
------------------
ENHANCEMENTS
* 387: system-wide open connections a-la netstat.
BUG FIXES
* 421: [Solaris] psutil does not compile on SunOS 5.10 (patch by Naveed
Roudsari)
* 489: [Linux] psutil.disk_partitions() return an empty list.
2.0.0 - 2014-03-10
------------------
ENHANCEMENTS
* #424: [Windows] installer for Python 3.X 64 bit.
* #427: number of logical and physical CPUs (psutil.cpu_count()).
* #447: psutil.wait_procs() timeout parameter is now optional.
* #452: make Process instances hashable and usable with set()s.
* #453: tests on Python < 2.7 require unittest2 module.
* #459: add a make file for running tests and other repetitive tasks (also
on Windows).
* #463: make timeout parameter of cpu_percent* functions default to 0.0 'cause
it's a common trap to introduce slowdowns.
* #468: move documentation to readthedocs.com.
* #477: process cpu_percent() is about 30% faster. (suggested by crusaderky)
* #478: [Linux] almost all APIs are about 30% faster on Python 3.X.
* #479: long deprecated psutil.error module is gone; exception classes now
live in "psutil" namespace only.
BUG FIXES
* #193: psutil.Popen constructor can throw an exception if the spawned process
terminates quickly.
* #340: [Windows] process get_open_files() no longer hangs. (patch by
jtang@vahna.net)
* #443: [Linux] fix a potential overflow issue for Process.set_cpu_affinity()
on systems with more than 64 CPUs.
* #448: [Windows] get_children() and ppid() memory leak (patch by Ulrich
Klank).
* #457: [POSIX] pid_exists() always returns True for PID 0.
* #461: namedtuples are not pickle-able.
* #466: [Linux] process exe improper null bytes handling. (patch by
Gautam Singh)
* #470: wait_procs() might not wait. (patch by crusaderky)
* #471: [Windows] process exe improper unicode handling. (patch by
alex@mroja.net)
* #473: psutil.Popen.wait() does not set returncode attribute.
* #474: [Windows] Process.cpu_percent() is no longer capped at 100%.
* #476: [Linux] encoding error for process name and cmdline.
API CHANGES
For the sake of consistency a lot of psutil APIs have been renamed.
In most cases accessing the old names will work but it will cause a DeprecationWarning.
* psutil.* module level constants have being replaced by functions:
---------------------------------------------------------
| Old name | Replacement |
---------------------------------------------------------
| - psutil.NUM_CPUS | psutil.cpu_cpunt() |
| - psutil.BOOT_TIME | psutil.boot_time() |
| - psutil.TOTAL_PHYMEM | psutil.virtual_memory().total |
---------------------------------------------------------
* Renamed psutil.* functions:
-----------------------------------------------
| Old name | Replacement |
-----------------------------------------------
| - psutil.get_pid_list() | psutil.pids() |
| - psutil.get_users() | psutil.users() |
| - psutil.get_boot_time() | psutil.boot_time() |
-----------------------------------------------
* All psutil.Process get_* methods lost the "get_" prefix.
get_ext_memory_info() renamed to memory_info_ex().
Assuming "p = psutil.Process()":
-------------------------------------------------
| Old name | Replacement |
-------------------------------------------------
| p.get_children() | p.children() |
| p.get_connections() | p.connections() |
| p.get_cpu_affinity() | p.cpu_affinity() |
| p.get_cpu_percent() | p.cpu_percent() |
| p.get_cpu_times() | p.cpu_times() |
| p.get_ext_memory_info() | p.memory_info_ex() |
| p.get_io_counters() | p.io_counters() |
| p.get_ionice() | p.ionice() |
| p.get_memory_info() | p.memory_info() |
| p.get_memory_maps() | p.memory_maps() |
| p.get_memory_percent() | p.memory_percent() |
| p.get_nice() | p.nice() |
| p.get_num_ctx_switches() | p.num_ctx_switches() |
| p.get_num_fds() | p.num_fds() |
| p.get_num_threads() | p.num_threads() |
| p.get_open_files() | p.open_files() |
| p.get_rlimit() | p.rlimit() |
| p.get_threads() | p.threads() |
| p.getcwd() | p.cwd() |
-------------------------------------------------
* All psutil.Process set_* methods lost the "set_" prefix.
Assuming "p = psutil.Process()":
--------------------------------------------------------
| Old name | Replacement |
--------------------------------------------------------
| p.set_nice() | p.nice(value) |
| p.set_ionice() | p.ionice(ioclass, value=None) |
| p.set_cpu_affinity() | p.cpu_affinity(cpus) |
| p.set_rlimit() | p.rlimit(resource, limits=None) |
--------------------------------------------------------
* Except for 'pid' all psutil.Process class properties have been turned into
methods. This is the only case which there are no aliases.
Assuming "p = psutil.Process()":
---------------------------------
| Old name | Replacement |
---------------------------------
| p.name | p.name() |
| p.parent | p.parent() |
| p.ppid | p.ppid() |
| p.exe | p.exe() |
| p.cmdline | p.cmdline() |
| p.status | p.status() |
| p.uids | p.uids() |
| p.gids | p.gids() |
| p.username | p.username() |
| p.create_time | p.create_time() |
---------------------------------
* Others:
* timeout parameter of cpu_percent* functions defaults to 0.0 instead of 0.1.
* long deprecated psutil.error module is gone; exception classes now live in
"psutil" namespace only.
* Process instances' "retcode" attribute returned by psutil.wait_procs() has
been renamed to "returncode" for consistency with subprocess.Popen.
either because they themselves are not ready or because a
dependency isn't. This is annotated by
PYTHON_VERSIONS_INCOMPATIBLE= 33 # not yet ported as of x.y.z
or
PYTHON_VERSIONS_INCOMPATIBLE= 33 # py-foo, py-bar
respectively, please use the same style for other packages,
and check during updates.
Use versioned_dependencies.mk where applicable.
Use REPLACE_PYTHON instead of handcoded alternatives, where applicable.
Reorder Makefile sections into standard order, where applicable.
Remove PYTHON_VERSIONS_INCLUDE_3X lines since that will be default
with the next commit.
Whitespace cleanups and other nits corrected, where necessary.
1.2.1 - 2013-11-25
------------------
BUG FIXES
* #348: [Windows XP] fixed "ImportError: DLL load failed" occurring on module
import.
* #425: [Solaris] crash on import due to failure at determining BOOT_TIME.
* #443: [Linux] can't set CPU affinity on systems with more than 64 cores.
1.2.0 - 2013-11-20
------------------
ENHANCEMENTS
* #439: assume os.getpid() if no argument is passed to psutil.Process
constructor.
* #440: new psutil.wait_procs() utility function which waits for multiple
processes to terminate.
BUG FIXES
* #348: [Windows XP/Vista] fixed "ImportError: DLL load failed" occurring on
module import.
1.1.3 - 2013-11-07
------------------
BUG FIXES
* #442: [Linux] psutil won't compile on certain version of Linux because of
missing prlimit(2) syscall.
1.1.2 - 2013-10-22
------------------
BUG FIXES
* #442: [Linux] psutil won't compile on Debian 6.0 because of missing
prlimit(2) syscall.
1.1.1 - 2013-10-08
------------------
BUG FIXES
* #438: [Linux] psutil won't compile on kernels < 2.6.36 due to missing
prlimit(2) syscall.
1.1.0 - 2013-09-28
------------------
ENHANCEMENTS
* #410: tar.gz and windows binary files are now hosted on PYPI.
* #412: [Linux] get/set process resource limits.
* #415: [Windows] Process.get_children() is an order of magnitude faster.
* #426: [Windows] Process.name is an order of magnitude faster.
* #431: [UNIX] Process.name is slightly faster because it unnecessarily
retrieved also process cmdline.
BUG FIXES
* #391: [Windows] psutil.cpu_times_percent() returns negative percentages.
* #408: STATUS_* and CONN_* constants don't properly serialize on JSON.
* #411: [Windows] examples/disk_usage.py may pop-up a GUI error.
* #413: [Windows] Process.get_memory_info() leaks memory.
* #414: [Windows] Process.exe on Windows XP may raise ERROR_INVALID_PARAMETER.
* #416: psutil.disk_usage() doesn't work well with unicode path names.
* #430: [Linux] process IO counters report wrong number of r/w syscalls.
* #435: [Linux] psutil.net_io_counters() might report erreneous NIC names.
* #436: [Linux] psutil.net_io_counters() reports a wrong 'dropin' value.
API CHANGES
* #408: STATUS_* and CONN_* constants (returned by Process' status() and
get_connections() methods respectively) have been turned from constant
objects to plain Python strings.
util is a module providing an interface for retrieving information,
on all running processes and system utilization (CPU, memory, disks,
network, users) in a portable way by using Python, implementing
many functionalities offered by command line tools such as ps, top,
df, netstat, who, kill, uptime, free, lsof, ifconfig, nice, ionice,
iostat, iotop, pidof, tty, taskset, or pmap.
Ported to NetBSD by tron & myself, but more work to do.