summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--psutil/_psosx.py4
-rw-r--r--psutil/_psutil_osx.c18
-rwxr-xr-xscripts/internal/bench_oneshot.py1
3 files changed, 20 insertions, 3 deletions
diff --git a/psutil/_psosx.py b/psutil/_psosx.py
index 284fed08..361c0a8b 100644
--- a/psutil/_psosx.py
+++ b/psutil/_psosx.py
@@ -68,6 +68,7 @@ kinfo_proc_map = dict(
ttynr=7,
ctime=8,
status=9,
+ name=10,
)
pidtaskinfo_map = dict(
@@ -313,7 +314,8 @@ class Process(object):
@wrap_exceptions
def name(self):
- return cext.proc_name(self.pid)
+ name = self._get_kinfo_proc()[kinfo_proc_map['name']]
+ return name if name is not None else cext.proc_name(self.pid)
@wrap_exceptions
def exe(self):
diff --git a/psutil/_psutil_osx.c b/psutil/_psutil_osx.c
index c0260f95..d90f3fd1 100644
--- a/psutil/_psutil_osx.c
+++ b/psutil/_psutil_osx.c
@@ -124,14 +124,27 @@ static PyObject *
psutil_proc_kinfo_oneshot(PyObject *self, PyObject *args) {
long pid;
struct kinfo_proc kp;
+ PyObject *py_name;
if (! PyArg_ParseTuple(args, "l", &pid))
return NULL;
if (psutil_get_kinfo_proc(pid, &kp) == -1)
return NULL;
+#if PY_MAJOR_VERSION >= 3
+ py_name = PyUnicode_DecodeFSDefault(kp.kp_proc.p_comm);
+#else
+ py_name = Py_BuildValue("s", kp.kp_proc.p_comm);
+#endif
+ if (! py_name) {
+ // Likely a decoding error. We don't want to fail the whole
+ // operation. The python module may retry with proc_name().
+ PyErr_Clear();
+ py_name = Py_None;
+ }
+
return Py_BuildValue(
- "lllllllidi",
+ "lllllllidiO",
(long)kp.kp_eproc.e_ppid, // (long) ppid
(long)kp.kp_eproc.e_pcred.p_ruid, // (long) real uid
(long)kp.kp_eproc.e_ucred.cr_uid, // (long) effective uid
@@ -141,7 +154,8 @@ psutil_proc_kinfo_oneshot(PyObject *self, PyObject *args) {
(long)kp.kp_eproc.e_pcred.p_svgid, // (long) saved gid
kp.kp_eproc.e_tdev, // (int) tty nr
PSUTIL_TV2DOUBLE(kp.kp_proc.p_starttime), // (double) create time
- (int)kp.kp_proc.p_stat // (int) status
+ (int)kp.kp_proc.p_stat, // (int) status
+ py_name // (pystr) name
);
}
diff --git a/scripts/internal/bench_oneshot.py b/scripts/internal/bench_oneshot.py
index f46b5d2c..12a76680 100755
--- a/scripts/internal/bench_oneshot.py
+++ b/scripts/internal/bench_oneshot.py
@@ -77,6 +77,7 @@ elif psutil.OSX:
'create_time',
'gids',
'memory_info',
+ 'name',
'num_ctx_switches',
'num_threads',
'ppid',