Skip to content

Commit

Permalink
Merge branch 'master' into fix-cpu-freq-apple-silicon
Browse files Browse the repository at this point in the history
  • Loading branch information
snOm3ad committed Apr 18, 2023
2 parents 971ea61 + 0d4900b commit 56c5bf4
Show file tree
Hide file tree
Showing 16 changed files with 181 additions and 85 deletions.
67 changes: 67 additions & 0 deletions .github/workflows/bsd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Execute tests on *BSD platforms. Does not produce wheels.
# Useful URLs:
# https://github.com/vmactions/freebsd-vm
# https://github.com/vmactions/openbsd-vm
# https://github.com/vmactions/netbsd-vm

on: [push, pull_request]
name: bsd-tests
concurrency:
group: ${{ github.ref }}-${{ github.workflow }}-${{ github.event_name }}-${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) && github.sha || '' }}
cancel-in-progress: true
jobs:
freebsd:
runs-on: macos-12
steps:
- uses: actions/checkout@v3
- name: Run tests
uses: vmactions/freebsd-vm@v0
with:
usesh: true
prepare: |
pkg install -y gcc python3
run: |
set -e -x
make install-pip
python3 -m pip install --user setuptools
make install
make test
make test-memleaks
openbsd:
runs-on: macos-12
steps:
- uses: actions/checkout@v3
- name: Run tests
uses: vmactions/openbsd-vm@v0
with:
usesh: true
prepare: |
set -e
pkg_add gcc python3
run: |
set -e
make install-pip
python3 -m pip install --user setuptools
make install
make test
make test-memleaks
netbsd:
runs-on: macos-12
steps:
- uses: actions/checkout@v3
- name: Run tests
uses: vmactions/netbsd-vm@v0
with:
usesh: true
prepare: |
set -e
pkg_add -v pkgin
pkgin update
pkgin -y install python311-* py311-setuptools-* gcc12-*
run: |
set -e
make install-pip PYTHON=python3.11
python3.11 -m pip install --user setuptools
make install PYTHON=python3.11
make test PYTHON=python3.11
make test-memleaks PYTHON=python3.11
44 changes: 5 additions & 39 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,21 +1,15 @@
# Executed on every push by GitHub Actions. This runs CI tests and
# generates wheels (not all) on the following platforms:
# Runs CI tests and generates wheels on the following platforms:
#
# * Linux
# * macOS
# * Windows (disabled)
# * FreeBSD
# * Linux (py2 and py3)
# * macOS (py2 and py3)
# * Windows (py3, py2 is done by appveyor)
#
# To skip certain builds see:
# https://cibuildwheel.readthedocs.io/en/stable/options/#build-skip
#
# External GH actions:
# Useful URLs:
# * https://github.com/pypa/cibuildwheel
# * https://github.com/actions/checkout
# * https://github.com/actions/setup-python
# * https://github.com/actions/upload-artifact
# * https://github.com/marketplace/actions/cancel-workflow-action
# * https://github.com/vmactions/freebsd-vm

on: [push, pull_request]
name: build
Expand Down Expand Up @@ -110,34 +104,6 @@ jobs:
python setup.py sdist
mv dist/psutil*.tar.gz wheelhouse/
# FreeBSD (tests only)
py3-freebsd:
runs-on: macos-12
steps:
- name: Cancel previous runs
uses: styfle/cancel-workflow-action@0.9.1
with:
access_token: ${{ github.token }}

- uses: actions/checkout@v3

- name: Run tests
id: test
uses: vmactions/freebsd-vm@v0
with:
usesh: true
prepare: pkg install -y gcc python3
run: |
set +e
export \
PYTHONUNBUFFERED=1 \
PYTHONWARNINGS=always \
PSUTIL_DEBUG=1
python3 -m pip install --user setuptools
python3 setup.py install
python3 psutil/tests/runner.py
python3 psutil/tests/test_memleaks.py
# Run linters
linters:
runs-on: ubuntu-latest
Expand Down
20 changes: 16 additions & 4 deletions HISTORY.rst
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
*Bug tracker at https://github.com/giampaolo/psutil/issues*

5.9.5 (IN DEVELOPMENT)
======================
5.9.5
=====

2023-04-17

**Enhancements**

Expand All @@ -15,6 +17,16 @@
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**

Expand All @@ -39,8 +51,8 @@
*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]: `Process.cwd()`_ may raise ``FileNotFoundError`` if cwd no
longer exists. Return ``None`` instead.
- 2237_, [OpenBSD], [NetBSD]: `Process.cwd()`_ may raise ``FileNotFoundError``
if cwd no longer exists. Return an empty string instead.

5.9.4
=====
Expand Down
10 changes: 6 additions & 4 deletions INSTALL.rst
Original file line number Diff line number Diff line change
Expand Up @@ -62,18 +62,20 @@ OpenBSD
::

export PKG_PATH=http://ftp.eu.openbsd.org/pub/OpenBSD/`uname -r`/packages/`uname -m`/
pkg_add -v python gcc
pkg_add -v python3 gcc
pip install psutil

NetBSD
------

Assuming Python 3.11 (the most recent at the time of writing):

::

export PKG_PATH="ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/`uname -m`/`uname -r`/All"
export PKG_PATH="http://ftp.netbsd.org/pub/pkgsrc/packages/NetBSD/`uname -m`/`uname -r`/All"
pkg_add -v pkgin
pkgin install python3 gcc
pip install psutil
pkgin install python311-* gcc12-* py311-setuptools-* py311-pip-*
python3.11 -m pip install psutil

Sun Solaris
-----------
Expand Down
14 changes: 9 additions & 5 deletions README.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
| |downloads| |stars| |forks| |contributors| |coverage|
| |version| |py-versions| |packages| |license|
| |github-actions| |appveyor| |doc| |twitter| |tidelift|
| |github-actions-wheels| |github-actions-bsd| |appveyor| |doc| |twitter| |tidelift|
.. |downloads| image:: https://img.shields.io/pypi/dm/psutil.svg
:target: https://pepy.tech/project/psutil
Expand All @@ -18,13 +18,17 @@
:target: https://github.com/giampaolo/psutil/graphs/contributors
:alt: Contributors

.. |github-actions| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/build.yml?label=Linux%2C%20macOS%2C%20FreeBSD%20tests
.. |github-actions-wheels| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/build.yml?label=Linux%2C%20macOS%2C%20Windows
:target: https://github.com/giampaolo/psutil/actions?query=workflow%3Abuild
:alt: Linux, macOS, Windows tests
:alt: Linux, macOS, Windows

.. |appveyor| image:: https://img.shields.io/appveyor/build/giampaolo/psutil/master.svg?maxAge=3600&label=Windows%20tests
.. |github-actions-bsd| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/bsd.yml?label=FreeBSD,%20NetBSD,%20OpenBSD
:target: https://github.com/giampaolo/psutil/actions?query=workflow%3Absd-tests
:alt: FreeBSD, NetBSD, OpenBSD

.. |appveyor| image:: https://img.shields.io/appveyor/build/giampaolo/psutil/master.svg?maxAge=3600&label=Windows%20(py2)
:target: https://ci.appveyor.com/project/giampaolo/psutil
:alt: Windows tests (Appveyor)
:alt: Windows (Appveyor)

.. |coverage| image:: https://coveralls.io/repos/github/giampaolo/psutil/badge.svg?branch=master
:target: https://coveralls.io/github/giampaolo/psutil?branch=master
Expand Down
29 changes: 22 additions & 7 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1180,9 +1180,10 @@ Process class

.. method:: exe()

The process executable as an absolute path.
On some systems this may also be an empty string.
The return value is cached after first call.
The process executable as an absolute path. On some systems, if exe cannot
be determined for some internal reason (e.g. system process or path no
longer exists), this may be an empty string. The return value is cached
after first call.

>>> import psutil
>>> psutil.Process().exe()
Expand Down Expand Up @@ -1281,7 +1282,9 @@ Process class

.. method:: cwd()

The process current working directory as an absolute path.
The process current working directory as an absolute path. If cwd cannot be
determined for some internal reason (e.g. system process or directiory no
longer exists) it may return an empty string.

.. versionchanged:: 5.6.4 added support for NetBSD

Expand Down Expand Up @@ -2634,6 +2637,18 @@ Supported Python versions are 2.7, 3.4+ and PyPy3.
Timeline
========

- 2023-04-17:
`5.9.5 <https://pypi.org/project/psutil/5.9.5/#files>`__ -
`what's new <https://github.com/giampaolo/psutil/blob/master/HISTORY.rst#595>`__ -
`diff <https://github.com/giampaolo/psutil/compare/release-5.9.4...release-5.9.5#files_bucket>`__
- 2022-11-07:
`5.9.4 <https://pypi.org/project/psutil/5.9.4/#files>`__ -
`what's new <https://github.com/giampaolo/psutil/blob/master/HISTORY.rst#594>`__ -
`diff <https://github.com/giampaolo/psutil/compare/release-5.9.3...release-5.9.4#files_bucket>`__
- 2022-10-18:
`5.9.3 <https://pypi.org/project/psutil/5.9.3/#files>`__ -
`what's new <https://github.com/giampaolo/psutil/blob/master/HISTORY.rst#593>`__ -
`diff <https://github.com/giampaolo/psutil/compare/release-5.9.2...release-5.9.3#files_bucket>`__
- 2022-09-04:
`5.9.2 <https://pypi.org/project/psutil/5.9.2/#files>`__ -
`what's new <https://github.com/giampaolo/psutil/blob/master/HISTORY.rst#592>`__ -
Expand All @@ -2650,7 +2665,7 @@ Timeline
`5.8.0 <https://pypi.org/project/psutil/5.8.0/#files>`__ -
`what's new <https://github.com/giampaolo/psutil/blob/master/HISTORY.rst#580>`__ -
`diff <https://github.com/giampaolo/psutil/compare/release-5.7.3...release-5.8.0#files_bucket>`__
- 2020-10-23:
- 2020-10-24:
`5.7.3 <https://pypi.org/project/psutil/5.7.3/#files>`__ -
`what's new <https://github.com/giampaolo/psutil/blob/master/HISTORY.rst#573>`__ -
`diff <https://github.com/giampaolo/psutil/compare/release-5.7.2...release-5.7.3#files_bucket>`__
Expand Down Expand Up @@ -2718,7 +2733,7 @@ Timeline
`5.4.6 <https://pypi.org/project/psutil/5.4.6/#files>`__ -
`what's new <https://github.com/giampaolo/psutil/blob/master/HISTORY.rst#546>`__ -
`diff <https://github.com/giampaolo/psutil/compare/release-5.4.5...release-5.4.6#files_bucket>`__
- 2018-04-14:
- 2018-04-13:
`5.4.5 <https://pypi.org/project/psutil/5.4.5/#files>`__ -
`what's new <https://github.com/giampaolo/psutil/blob/master/HISTORY.rst#545>`__ -
`diff <https://github.com/giampaolo/psutil/compare/release-5.4.4...release-5.4.5#files_bucket>`__
Expand All @@ -2744,7 +2759,7 @@ Timeline
`diff <https://github.com/giampaolo/psutil/compare/release-5.3.1...release-5.4.0#files_bucket>`__
- 2017-09-10:
`5.3.1 <https://pypi.org/project/psutil/5.3.1/#files>`__ -
`what's new <https://github.com/giampaolo/psutil/blob/master/HISTORY.rst#530>`__ -
`what's new <https://github.com/giampaolo/psutil/blob/master/HISTORY.rst#531>`__ -
`diff <https://github.com/giampaolo/psutil/compare/release-5.3.0...release-5.3.1#files_bucket>`__
- 2017-09-01:
`5.3.0 <https://pypi.org/project/psutil/5.3.0/#files>`__ -
Expand Down
7 changes: 6 additions & 1 deletion psutil/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -626,7 +626,12 @@ def name(self):
# Examples are "gnome-keyring-d" vs. "gnome-keyring-daemon".
try:
cmdline = self.cmdline()
except AccessDenied:
except (AccessDenied, ZombieProcess):
# Just pass and return the truncated name: it's better
# than nothing. Note: there are actual cases where a
# zombie process can return a name() but not a
# cmdline(), see:
# https://github.com/giampaolo/psutil/issues/2239
pass
else:
if cmdline:
Expand Down
2 changes: 1 addition & 1 deletion psutil/_psaix.py
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,7 @@ def cwd(self):
return result.rstrip('/')
except FileNotFoundError:
os.stat("%s/%s" % (procfs_path, self.pid)) # raise NSP or AD
return None
return ""

@wrap_exceptions
def memory_info(self):
Expand Down
4 changes: 2 additions & 2 deletions psutil/_psbsd.py
Original file line number Diff line number Diff line change
Expand Up @@ -835,11 +835,11 @@ def cwd(self):
# sometimes we get an empty string, in which case we turn
# it into None
if OPENBSD and self.pid == 0:
return None # ...else it would raise EINVAL
return "" # ...else it would raise EINVAL
elif NETBSD or HAS_PROC_OPEN_FILES:
# FreeBSD < 8 does not support functions based on
# kinfo_getfile() and kinfo_getvmmap()
return cext.proc_cwd(self.pid) or None
return cext.proc_cwd(self.pid)
else:
raise NotImplementedError(
"supported only starting from FreeBSD 8" if
Expand Down
2 changes: 1 addition & 1 deletion psutil/_pssunos.py
Original file line number Diff line number Diff line change
Expand Up @@ -542,7 +542,7 @@ def cwd(self):
return os.readlink("%s/%s/path/cwd" % (procfs_path, self.pid))
except FileNotFoundError:
os.stat("%s/%s" % (procfs_path, self.pid)) # raise NSP or AD
return None
return ""

@wrap_exceptions
def memory_info(self):
Expand Down
9 changes: 6 additions & 3 deletions psutil/arch/netbsd/proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,13 @@ psutil_proc_cwd(PyObject *self, PyObject *args) {
ssize_t len = readlink(buf, path, sizeof(path) - 1);
free(buf);
if (len == -1) {
if (errno == ENOENT)
NoSuchProcess("readlink -> ENOENT");
else
if (errno == ENOENT) {
psutil_debug("sysctl(KERN_PROC_CWD) -> ENOENT converted to ''");
return Py_BuildValue("s", "");
}
else {
PyErr_SetFromErrno(PyExc_OSError);
}
return NULL;
}
path[len] = '\0';
Expand Down
4 changes: 2 additions & 2 deletions psutil/arch/openbsd/proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -306,8 +306,8 @@ psutil_proc_cwd(PyObject *self, PyObject *args) {
int name[] = { CTL_KERN, KERN_PROC_CWD, pid };
if (sysctl(name, 3, path, &pathlen, NULL, 0) != 0) {
if (errno == ENOENT) {
psutil_debug("sysctl(KERN_PROC_CWD) -> ENOENT converted to None");
Py_RETURN_NONE; // mimic os.cpu_count()
psutil_debug("sysctl(KERN_PROC_CWD) -> ENOENT converted to ''");
return Py_BuildValue("s", "");
}
else {
PyErr_SetFromErrno(PyExc_OSError);
Expand Down
Loading

0 comments on commit 56c5bf4

Please sign in to comment.