summaryrefslogtreecommitdiff
path: root/psutil/_psosx.py
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2020-05-24 22:42:41 +0200
committerGiampaolo Rodola <g.rodola@gmail.com>2020-05-24 22:42:41 +0200
commit97d2284534fe1ebafd4bf466461390e7b0a66d7f (patch)
tree453f9ec7ae9e7abc9f400d849dac820bb4c3d4fa /psutil/_psosx.py
parent7d081114d708c60761e355c555d73ea29460d9a0 (diff)
downloadpsutil-wheel5.tar.gz
maybe we have a zombie process detection on OSXwheel5
Diffstat (limited to 'psutil/_psosx.py')
-rw-r--r--psutil/_psosx.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/psutil/_psosx.py b/psutil/_psosx.py
index e4296495..2feff932 100644
--- a/psutil/_psosx.py
+++ b/psutil/_psosx.py
@@ -324,6 +324,14 @@ def pids():
pid_exists = _psposix.pid_exists
+def is_zombie(pid):
+ try:
+ st = cext.proc_kinfo_oneshot(pid)[kinfo_proc_map['status']]
+ return st == cext.SZOMB
+ except Exception:
+ return False
+
+
def wrap_exceptions(fun):
"""Decorator which translates bare OSError exceptions into
NoSuchProcess and AccessDenied.
@@ -333,7 +341,10 @@ def wrap_exceptions(fun):
try:
return fun(self, *args, **kwargs)
except ProcessLookupError:
- raise NoSuchProcess(self.pid, self._name)
+ if is_zombie(self.pid):
+ raise ZombieProcess(self.pid, self._name, self._ppid)
+ else:
+ raise NoSuchProcess(self.pid, self._name)
except PermissionError:
raise AccessDenied(self.pid, self._name)
except cext.ZombieProcessError: