summaryrefslogtreecommitdiffstats
path: root/netbsd/NetBSDProcess.c
diff options
context:
space:
mode:
authorfraggerfox <santhosh.raju@gmail.com>2021-03-15 13:14:39 +0530
committerBenBE <BenBE@geshi.org>2021-06-26 12:18:37 +0200
commit4b49de44a8659674c6e92ba70e0c1930b2b9315b (patch)
treed831fd16f5a13843766d9ae18a0060ff1b3d5b39 /netbsd/NetBSDProcess.c
parent30dc4a28125e7199a51abde86af7b73027fa0bd2 (diff)
Add NetBSD platform support without procfs dependency
- TODO, clean up the code base and update comments in code.
Diffstat (limited to 'netbsd/NetBSDProcess.c')
-rw-r--r--netbsd/NetBSDProcess.c240
1 files changed, 240 insertions, 0 deletions
diff --git a/netbsd/NetBSDProcess.c b/netbsd/NetBSDProcess.c
new file mode 100644
index 00000000..3448e6dc
--- /dev/null
+++ b/netbsd/NetBSDProcess.c
@@ -0,0 +1,240 @@
+/*
+htop - NetBSDProcess.c
+(C) 2015 Hisham H. Muhammad
+(C) 2021 Santhosh Raju
+Released under the GNU GPLv2, see the COPYING file
+in the source distribution for its full text.
+*/
+
+#include "NetBSDProcess.h"
+
+#include <stdlib.h>
+
+#include "CRT.h"
+#include "Process.h"
+#include "RichString.h"
+#include "XUtils.h"
+
+
+const ProcessFieldData Process_fields[LAST_PROCESSFIELD] = {
+ [0] = {
+ .name = "",
+ .title = NULL,
+ .description = NULL,
+ .flags = 0,
+ },
+ [PID] = {
+ .name = "PID",
+ .title = "PID",
+ .description = "Process/thread ID",
+ .flags = 0,
+ .pidColumn = true,
+ },
+ [COMM] = {
+ .name = "Command",
+ .title = "Command ",
+ .description = "Command line",
+ .flags = 0,
+ },
+ [STATE] = {
+ .name = "STATE",
+ .title = "S ",
+ .description = "Process state (S sleeping, R running, D disk, Z zombie, T traced, W paging)",
+ .flags = 0,
+ },
+ [PPID] = {
+ .name = "PPID",
+ .title = "PPID",
+ .description = "Parent process ID",
+ .flags = 0,
+ .pidColumn = true,
+ },
+ [PGRP] = {
+ .name = "PGRP",
+ .title = "PGRP",
+ .description = "Process group ID",
+ .flags = 0,
+ .pidColumn = true,
+ },
+ [SESSION] = {
+ .name = "SESSION",
+ .title = "SESN",
+ .description = "Process's session ID",
+ .flags = 0,
+ .pidColumn = true,
+ },
+ [TTY] = {
+ .name = "TTY",
+ .title = "TTY ",
+ .description = "Controlling terminal",
+ .flags = 0,
+ },
+ [TPGID] = {
+ .name = "TPGID",
+ .title = "TPGID",
+ .description = "Process ID of the fg process group of the controlling terminal",
+ .flags = 0,
+ .pidColumn = true,
+ },
+ [MINFLT] = {
+ .name = "MINFLT",
+ .title = " MINFLT ",
+ .description = "Number of minor faults which have not required loading a memory page from disk",
+ .flags = 0,
+ .defaultSortDesc = true,
+ },
+ [MAJFLT] = {
+ .name = "MAJFLT",
+ .title = " MAJFLT ",
+ .description = "Number of major faults which have required loading a memory page from disk",
+ .flags = 0,
+ .defaultSortDesc = true,
+ },
+ [PRIORITY] = {
+ .name = "PRIORITY",
+ .title = "PRI ",
+ .description = "Kernel's internal priority for the process",
+ .flags = 0,
+ },
+ [NICE] = {
+ .name = "NICE",
+ .title = " NI ",
+ .description = "Nice value (the higher the value, the more it lets other processes take priority)",
+ .flags = 0,
+ },
+ [STARTTIME] = {
+ .name = "STARTTIME",
+ .title = "START ",
+ .description = "Time the process was started",
+ .flags = 0,
+ },
+ [PROCESSOR] = {
+ .name = "PROCESSOR",
+ .title = "CPU ",
+ .description = "Id of the CPU the process last executed on",
+ .flags = 0,
+ },
+ [M_VIRT] = {
+ .name = "M_VIRT",
+ .title = " VIRT ",
+ .description = "Total program size in virtual memory",
+ .flags = 0,
+ .defaultSortDesc = true,
+ },
+ [M_RESIDENT] = {
+ .name = "M_RESIDENT",
+ .title = " RES ",
+ .description = "Resident set size, size of the text and data sections, plus stack usage",
+ .flags = 0,
+ .defaultSortDesc = true,
+ },
+ [ST_UID] = {
+ .name = "ST_UID",
+ .title = " UID ",
+ .description = "User ID of the process owner",
+ .flags = 0,
+ },
+ [PERCENT_CPU] = {
+ .name = "PERCENT_CPU",
+ .title = "CPU% ",
+ .description = "Percentage of the CPU time the process used in the last sampling",
+ .flags = 0,
+ .defaultSortDesc = true,
+ },
+ [PERCENT_NORM_CPU] = {
+ .name = "PERCENT_NORM_CPU",
+ .title = "NCPU%",
+ .description = "Normalized percentage of the CPU time the process used in the last sampling (normalized by cpu count)",
+ .flags = 0,
+ .defaultSortDesc = true,
+ },
+ [PERCENT_MEM] = {
+ .name = "PERCENT_MEM",
+ .title = "MEM% ",
+ .description = "Percentage of the memory the process is using, based on resident memory size",
+ .flags = 0,
+ .defaultSortDesc = true,
+ },
+ [USER] = {
+ .name = "USER",
+ .title = "USER ",
+ .description = "Username of the process owner (or user ID if name cannot be determined)",
+ .flags = 0,
+ },
+ [TIME] = {
+ .name = "TIME",
+ .title = " TIME+ ",
+ .description = "Total time the process has spent in user and system time",
+ .flags = 0,
+ .defaultSortDesc = true,
+ },
+ [NLWP] = {
+ .name = "NLWP",
+ .title = "NLWP ",
+ .description = "Number of threads in the process",
+ .flags = 0,
+ },
+ [TGID] = {
+ .name = "TGID",
+ .title = "TGID",
+ .description = "Thread group ID (i.e. process ID)",
+ .flags = 0,
+ .pidColumn = true,
+ },
+};
+
+Process* NetBSDProcess_new(const Settings* settings) {
+ NetBSDProcess* this = xCalloc(sizeof(NetBSDProcess), 1);
+ Object_setClass(this, Class(NetBSDProcess));
+ Process_init(&this->super, settings);
+ return &this->super;
+}
+
+void Process_delete(Object* cast) {
+ NetBSDProcess* this = (NetBSDProcess*) cast;
+ Process_done((Process*)cast);
+ free(this);
+}
+
+static void NetBSDProcess_writeField(const Process* this, RichString* str, ProcessField field) {
+ //const NetBSDProcess* op = (const NetBSDProcess*) this;
+ char buffer[256]; buffer[255] = '\0';
+ int attr = CRT_colors[DEFAULT_COLOR];
+ //int n = sizeof(buffer) - 1;
+ switch (field) {
+ // add NetBSD-specific fields here
+ default:
+ Process_writeField(this, str, field);
+ return;
+ }
+ RichString_appendWide(str, attr, buffer);
+}
+
+static int NetBSDProcess_compareByKey(const Process* v1, const Process* v2, ProcessField key) {
+ const NetBSDProcess* p1 = (const NetBSDProcess*)v1;
+ const NetBSDProcess* p2 = (const NetBSDProcess*)v2;
+
+ // remove if actually used
+ (void)p1; (void)p2;
+
+ switch (key) {
+ // add NetBSD-specific fields here
+ default:
+ return Process_compareByKey_Base(v1, v2, key);
+ }
+}
+
+const ProcessClass NetBSDProcess_class = {
+ .super = {
+ .extends = Class(Process),
+ .display = Process_display,
+ .delete = Process_delete,
+ .compare = Process_compare
+ },
+ .writeField = NetBSDProcess_writeField,
+ .compareByKey = NetBSDProcess_compareByKey
+};
+
+bool Process_isThread(const Process* this) {
+ return Process_isKernelThread(this) || Process_isUserlandThread(this);
+}

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