summaryrefslogtreecommitdiffstats
path: root/linux/LinuxProcessList.c
diff options
context:
space:
mode:
authorChristian Göttsche <cgzones@googlemail.com>2020-11-26 17:51:54 +0100
committerBenBE <BenBE@geshi.org>2020-12-03 09:21:28 +0100
commitfe848403149dd8e452281ec8eb16a8401112b0f6 (patch)
treea037e316d1da9f475969dc7f1df3668e8e65c480 /linux/LinuxProcessList.c
parentc6b66a75ea140f5b3ed50b273be4c9b3c60ebfad (diff)
Add Linux cwd process column
Diffstat (limited to 'linux/LinuxProcessList.c')
-rw-r--r--linux/LinuxProcessList.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c
index 5d9ec87b..46850e1a 100644
--- a/linux/LinuxProcessList.c
+++ b/linux/LinuxProcessList.c
@@ -882,6 +882,31 @@ static void LinuxProcessList_readSecattrData(LinuxProcess* process, openat_arg_t
process->secattr = xStrdup(buffer);
}
+static void LinuxProcessList_readCwd(LinuxProcess* process, openat_arg_t procFd) {
+ char pathBuffer[PATH_MAX + 1];
+
+#if defined(HAVE_READLINKAT) && defined(HAVE_OPENAT)
+ ssize_t r = readlinkat(procFd, "cwd", pathBuffer, sizeof(pathBuffer) - 1);
+#else
+ char filename[MAX_NAME + 1];
+ xSnprintf(filename, sizeof(filename), "%s/cwd", procFd);
+ ssize_t r = readlink(filename, pathBuffer, sizeof(pathBuffer) - 1);
+#endif
+ if (r < 0) {
+ free(process->cwd);
+ process->cwd = NULL;
+ return;
+ }
+
+ pathBuffer[r] = '\0';
+
+ if (process->cwd && String_eq(process->cwd, pathBuffer))
+ return;
+
+ free(process->cwd);
+ process->cwd = xStrdup(pathBuffer);
+}
+
#ifdef HAVE_DELAYACCT
static int handleNetlinkMsg(struct nl_msg* nlmsg, void* linuxProcess) {
@@ -1404,6 +1429,10 @@ static bool LinuxProcessList_recurseProcTree(LinuxProcessList* this, openat_arg_
LinuxProcessList_readSecattrData(lp, procFd);
}
+ if (settings->flags & PROCESS_FLAG_LINUX_CWD) {
+ LinuxProcessList_readCwd(lp, procFd);
+ }
+
if (proc->state == 'Z' && (proc->basenameOffset == 0)) {
proc->basenameOffset = -1;
setCommand(proc, command, commLen);

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