From 15b78bc5cd693824f4b4576faf2314cef245440b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=B6ttsche?= Date: Tue, 9 Jan 2024 23:10:03 +0100 Subject: [PATCH] Linux: add process column whether it is marked a container process Might be useful for some users and for debugging the hideRunningInContainer detection. --- linux/LinuxProcess.c | 15 +++++++++++++++ linux/LinuxProcess.h | 25 +++++++++++++------------ linux/LinuxProcessTable.c | 2 +- linux/ProcessField.h | 1 + 4 files changed, 30 insertions(+), 13 deletions(-) diff --git a/linux/LinuxProcess.c b/linux/LinuxProcess.c index 510c44eef4..889ecba2ae 100644 --- a/linux/LinuxProcess.c +++ b/linux/LinuxProcess.c @@ -106,6 +106,7 @@ const ProcessFieldData Process_fields[LAST_PROCESSFIELD] = { [CWD] = { .name = "CWD", .title = "CWD ", .description = "The current working directory of the process", .flags = PROCESS_FLAG_CWD, }, [AUTOGROUP_ID] = { .name = "AUTOGROUP_ID", .title = "AGRP", .description = "The autogroup identifier of the process", .flags = PROCESS_FLAG_LINUX_AUTOGROUP, }, [AUTOGROUP_NICE] = { .name = "AUTOGROUP_NICE", .title = " ANI", .description = "Nice value (the higher the value, the more other processes take priority) associated with the process autogroup", .flags = PROCESS_FLAG_LINUX_AUTOGROUP, }, + [ISCONTAINER] = { .name = "ISCONTAINER", .title = "CONT ", .description = "Whether the process is running inside a child container", .flags = PROCESS_FLAG_LINUX_ISCONTAINER, }, #ifdef SCHEDULER_SUPPORT [SCHEDULERPOLICY] = { .name = "SCHEDULERPOLICY", .title = "SCHED ", .description = "Current scheduling policy of the process", .flags = PROCESS_FLAG_SCHEDPOL, }, #endif @@ -339,6 +340,18 @@ static void LinuxProcess_rowWriteField(const Row* super, RichString* str, Proces xSnprintf(buffer, n, "N/A "); } break; + case ISCONTAINER: + switch (this->isRunningInContainer) { + case TRI_ON: + xSnprintf(buffer, n, "YES "); + break; + case TRI_OFF: + xSnprintf(buffer, n, "NO "); + break; + default: + xSnprintf(buffer, n, "N/A "); + } + break; default: Process_writeField(this, str, field); return; @@ -441,6 +454,8 @@ static int LinuxProcess_compareByKey(const Process* v1, const Process* v2, Proce } case GPU_TIME: return SPACESHIP_NUMBER(p1->gpu_time, p2->gpu_time); + case ISCONTAINER: + return SPACESHIP_NUMBER(v1->isRunningInContainer, v2->isRunningInContainer); default: return Process_compareByKey_Base(v1, v2, key); } diff --git a/linux/LinuxProcess.h b/linux/LinuxProcess.h index 5a1e627250..f296a5ed4d 100644 --- a/linux/LinuxProcess.h +++ b/linux/LinuxProcess.h @@ -18,18 +18,19 @@ in the source distribution for its full text. #include "linux/IOPriority.h" -#define PROCESS_FLAG_LINUX_IOPRIO 0x00000100 -#define PROCESS_FLAG_LINUX_OPENVZ 0x00000200 -#define PROCESS_FLAG_LINUX_VSERVER 0x00000400 -#define PROCESS_FLAG_LINUX_CGROUP 0x00000800 -#define PROCESS_FLAG_LINUX_OOM 0x00001000 -#define PROCESS_FLAG_LINUX_SMAPS 0x00002000 -#define PROCESS_FLAG_LINUX_CTXT 0x00004000 -#define PROCESS_FLAG_LINUX_SECATTR 0x00008000 -#define PROCESS_FLAG_LINUX_LRS_FIX 0x00010000 -#define PROCESS_FLAG_LINUX_DELAYACCT 0x00040000 -#define PROCESS_FLAG_LINUX_AUTOGROUP 0x00080000 -#define PROCESS_FLAG_LINUX_GPU 0x00100000 +#define PROCESS_FLAG_LINUX_IOPRIO 0x00000100 +#define PROCESS_FLAG_LINUX_OPENVZ 0x00000200 +#define PROCESS_FLAG_LINUX_VSERVER 0x00000400 +#define PROCESS_FLAG_LINUX_CGROUP 0x00000800 +#define PROCESS_FLAG_LINUX_OOM 0x00001000 +#define PROCESS_FLAG_LINUX_SMAPS 0x00002000 +#define PROCESS_FLAG_LINUX_CTXT 0x00004000 +#define PROCESS_FLAG_LINUX_SECATTR 0x00008000 +#define PROCESS_FLAG_LINUX_LRS_FIX 0x00010000 +#define PROCESS_FLAG_LINUX_DELAYACCT 0x00040000 +#define PROCESS_FLAG_LINUX_AUTOGROUP 0x00080000 +#define PROCESS_FLAG_LINUX_GPU 0x00100000 +#define PROCESS_FLAG_LINUX_ISCONTAINER 0x00200000 typedef struct LinuxProcess_ { Process super; diff --git a/linux/LinuxProcessTable.c b/linux/LinuxProcessTable.c index af161c8d40..3e35344230 100644 --- a/linux/LinuxProcessTable.c +++ b/linux/LinuxProcessTable.c @@ -1714,7 +1714,7 @@ static bool LinuxProcessTable_recurseProcTree(LinuxProcessTable* this, openat_ar } if (ss->flags & PROCESS_FLAG_LINUX_CTXT - || (hideRunningInContainer && proc->isRunningInContainer == TRI_INITIAL) + || ((hideRunningInContainer || ss->flags & PROCESS_FLAG_LINUX_ISCONTAINER) && proc->isRunningInContainer == TRI_INITIAL) #ifdef HAVE_VSERVER || ss->flags & PROCESS_FLAG_LINUX_VSERVER #endif diff --git a/linux/ProcessField.h b/linux/ProcessField.h index 735423b97d..47c4199fef 100644 --- a/linux/ProcessField.h +++ b/linux/ProcessField.h @@ -50,6 +50,7 @@ in the source distribution for its full text. M_PRIV = 131, \ GPU_TIME = 132, \ GPU_PERCENT = 133, \ + ISCONTAINER = 134, \ // End of list