summaryrefslogtreecommitdiffstats
path: root/netbsd
diff options
context:
space:
mode:
authorfraggerfox <santhosh.raju@gmail.com>2021-06-12 17:07:58 +0530
committerBenBE <BenBE@geshi.org>2021-06-26 12:18:37 +0200
commit336acb03095ffa4056a2828373bd282b9dff9129 (patch)
treed6941216d519cd2aa5deb9e3f10e6fbb274a7e08 /netbsd
parent612462e33d89fe6901969a9b698438c735678c4c (diff)
Adds support for PROC_EXE and CWD.
Diffstat (limited to 'netbsd')
-rw-r--r--netbsd/NetBSDProcess.c13
-rw-r--r--netbsd/NetBSDProcessList.c43
2 files changed, 56 insertions, 0 deletions
diff --git a/netbsd/NetBSDProcess.c b/netbsd/NetBSDProcess.c
index be87e3d7..2573d061 100644
--- a/netbsd/NetBSDProcess.c
+++ b/netbsd/NetBSDProcess.c
@@ -195,6 +195,19 @@ const ProcessFieldData Process_fields[LAST_PROCESSFIELD] = {
.description = "comm string of the process",
.flags = 0,
},
+ [PROC_EXE] = {
+ .name = "EXE",
+ .title = "EXE ",
+ .description = "Basename of exe of the process",
+ .flags = 0,
+ },
+ [CWD] = {
+ .name = "CWD",
+ .title = "CWD ",
+ .description = "The current working directory of the process",
+ .flags = PROCESS_FLAG_CWD,
+ },
+
};
Process* NetBSDProcess_new(const Settings* settings) {
diff --git a/netbsd/NetBSDProcessList.c b/netbsd/NetBSDProcessList.c
index c196f1ee..6b080e50 100644
--- a/netbsd/NetBSDProcessList.c
+++ b/netbsd/NetBSDProcessList.c
@@ -114,6 +114,44 @@ static void NetBSDProcessList_scanMemoryInfo(ProcessList* pl) {
pl->usedSwap = uvmexp.swpginuse * pageSizeKB;
}
+static void NetBSDProcessList_updateExe(const struct kinfo_proc2* kproc, Process* proc) {
+ const int mib[] = { CTL_KERN, KERN_PROC_ARGS, kproc->p_pid, KERN_PROC_PATHNAME };
+ char buffer[2048];
+ size_t size = sizeof(buffer);
+ if (sysctl(mib, 4, buffer, &size, NULL, 0) != 0) {
+ Process_updateExe(proc, NULL);
+ return;
+ }
+ printf("%s\n", buffer);
+ /* Kernel threads return an empty buffer */
+ if (buffer[0] == '\0') {
+ Process_updateExe(proc, NULL);
+ return;
+ }
+
+ Process_updateExe(proc, buffer);
+}
+
+static void NetBSDProcessList_updateCwd(const struct kinfo_proc2* kproc, Process* proc) {
+ const int mib[] = { CTL_KERN, KERN_PROC_ARGS, kproc->p_pid, KERN_PROC_CWD };
+ char buffer[2048];
+ size_t size = sizeof(buffer);
+ if (sysctl(mib, 4, 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 NetBSDProcessList_updateProcessName(kvm_t* kd, const struct kinfo_proc2* kproc, Process* proc) {
Process_updateComm(proc, kproc->p_comm);
@@ -203,6 +241,7 @@ static void NetBSDProcessList_scanProcs(NetBSDProcessList* this) {
proc->user = UsersTable_getRef(this->super.usersTable, proc->st_uid);
ProcessList_add(&this->super, proc);
+ NetBSDProcessList_updateExe(kproc, proc);
NetBSDProcessList_updateProcessName(this->kd, kproc, proc);
} else {
if (settings->updateProcessNames) {
@@ -210,6 +249,10 @@ static void NetBSDProcessList_scanProcs(NetBSDProcessList* this) {
}
}
+ if (settings->flags & PROCESS_FLAG_CWD) {
+ NetBSDProcessList_updateCwd(kproc, proc);
+ }
+
proc->m_virt = kproc->p_vm_vsize;
proc->m_resident = kproc->p_vm_rssize;
proc->percent_mem = (proc->m_resident * pageSizeKB) / (double)(this->super.totalMem) * 100.0;

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