summaryrefslogtreecommitdiffstats
path: root/openbsd
diff options
context:
space:
mode:
authorBenny Baumann <BenBE@geshi.org>2021-05-25 19:08:14 +0200
committerBenny Baumann <BenBE@geshi.org>2021-05-25 21:55:04 +0200
commit5e92956abc23ffe1992a28eb02e8c157509542d1 (patch)
treea66a694b11746c70e8d619d36b9d8998dbf560e5 /openbsd
parent90f42695d22fdb22736936a085eaae2f438da5fd (diff)
OpenBSD: Implement CWD column
Diffstat (limited to 'openbsd')
-rw-r--r--openbsd/OpenBSDProcess.c6
-rw-r--r--openbsd/OpenBSDProcessList.c24
2 files changed, 30 insertions, 0 deletions
diff --git a/openbsd/OpenBSDProcess.c b/openbsd/OpenBSDProcess.c
index 58e2d52b..90994a70 100644
--- a/openbsd/OpenBSDProcess.c
+++ b/openbsd/OpenBSDProcess.c
@@ -193,6 +193,12 @@ const ProcessFieldData Process_fields[LAST_PROCESSFIELD] = {
.description = "comm string of the process",
.flags = 0,
},
+ [CWD] = {
+ .name = "CWD",
+ .title = "CWD ",
+ .description = "The current working directory of the process",
+ .flags = PROCESS_FLAG_CWD,
+ },
};
diff --git a/openbsd/OpenBSDProcessList.c b/openbsd/OpenBSDProcessList.c
index 03c22793..4e885b3c 100644
--- a/openbsd/OpenBSDProcessList.c
+++ b/openbsd/OpenBSDProcessList.c
@@ -171,6 +171,26 @@ static void OpenBSDProcessList_scanMemoryInfo(ProcessList* pl) {
}
}
+static void OpenBSDProcessList_updateCwd(const struct kinfo_proc* kproc, Process* proc) {
+ const int mib[] = { CTL_KERN, KERN_PROC_CWD, kproc->ki_pid };
+ char buffer[2048];
+ size_t size = sizeof(buffer);
+ if (sysctl(mib, 3, buffer, &size, NULL, 0) != 0) {
+ free(proc->procCwd);
+ proc->procCwd = NULL;
+ return;
+ }
+
+ /* Kernel threads return an empty buffer */
+ if (buffer[0] == '\0') {
+ free(proc->procCwd);
+ proc->procCwd = NULL;
+ return;
+ }
+
+ free_and_xStrdup(&proc->procCwd, buffer);
+}
+
static void OpenBSDProcessList_updateProcessName(kvm_t* kd, const struct kinfo_proc* kproc, Process* proc) {
Process_updateComm(proc, kproc->p_comm);
@@ -272,6 +292,10 @@ static void OpenBSDProcessList_scanProcs(OpenBSDProcessList* this) {
OpenBSDProcessList_updateProcessName(this->kd, kproc, proc);
+ if (settings->flags & PROCESS_FLAG_CWD) {
+ OpenBSDProcessList_updateCwd(kproc, proc);
+ }
+
proc->tty_nr = kproc->p_tdev;
const char* name = ((dev_t)kproc->p_tdev != NODEV) ? devname(kproc->p_tdev, S_IFCHR) : NULL;
if (!name || String_eq(name, "??")) {

© 2014-2024 Faster IT GmbH | imprint | privacy policy