htop/openbsd/OpenBSDProcess.c

250 lines
6.4 KiB
C
Raw Permalink Normal View History

2015-09-18 04:46:48 +00:00
/*
htop - OpenBSDProcess.c
(C) 2015 Hisham H. Muhammad
(C) 2015 Michael McConville
Released under the GNU GPLv2, see the COPYING file
2015-09-18 04:46:48 +00:00
in the source distribution for its full text.
*/
#include "OpenBSDProcess.h"
#include <stdlib.h>
#include "CRT.h"
#include "Process.h"
#include "RichString.h"
#include "XUtils.h"
2015-09-18 04:46:48 +00:00
ProcessFieldData Process_fields[] = {
[0] = {
2015-09-19 16:08:34 +00:00
.name = "",
.title = NULL,
.description = NULL,
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[PID] = {
2015-09-19 16:08:34 +00:00
.name = "PID",
.title = " PID ",
.description = "Process/thread ID",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[COMM] = {
2015-09-19 16:08:34 +00:00
.name = "Command",
.title = "Command ",
.description = "Command line",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[STATE] = {
2015-09-19 16:08:34 +00:00
.name = "STATE",
.title = "S ",
.description = "Process state (S sleeping, R running, D disk, Z zombie, T traced, W paging)",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[PPID] = {
2015-09-19 16:08:34 +00:00
.name = "PPID",
.title = " PPID ",
.description = "Parent process ID",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[PGRP] = {
2015-09-19 16:08:34 +00:00
.name = "PGRP",
.title = " PGRP ",
.description = "Process group ID",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[SESSION] = {
2015-09-19 16:08:34 +00:00
.name = "SESSION",
.title = " SESN ",
.description = "Process's session ID",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[TTY_NR] = {
2015-09-19 16:08:34 +00:00
.name = "TTY_NR",
.title = " TTY ",
2015-09-19 16:08:34 +00:00
.description = "Controlling terminal",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[TPGID] = {
2015-09-19 16:08:34 +00:00
.name = "TPGID",
.title = " TPGID ",
.description = "Process ID of the fg process group of the controlling terminal",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[MINFLT] = {
2015-09-19 16:08:34 +00:00
.name = "MINFLT",
.title = " MINFLT ",
.description = "Number of minor faults which have not required loading a memory page from disk",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[MAJFLT] = {
2015-09-19 16:08:34 +00:00
.name = "MAJFLT",
.title = " MAJFLT ",
.description = "Number of major faults which have required loading a memory page from disk",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[PRIORITY] = {
2015-09-19 16:08:34 +00:00
.name = "PRIORITY",
.title = "PRI ",
.description = "Kernel's internal priority for the process",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[NICE] = {
2015-09-19 16:08:34 +00:00
.name = "NICE",
.title = " NI ",
.description = "Nice value (the higher the value, the more it lets other processes take priority)",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[STARTTIME] = {
2015-09-19 16:08:34 +00:00
.name = "STARTTIME",
.title = "START ",
.description = "Time the process was started",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[PROCESSOR] = {
2015-09-19 16:08:34 +00:00
.name = "PROCESSOR",
.title = "CPU ",
.description = "Id of the CPU the process last executed on",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
[M_VIRT] = {
.name = "M_VIRT",
2015-09-19 16:08:34 +00:00
.title = " VIRT ",
.description = "Total program size in virtual memory",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[M_RESIDENT] = {
2015-09-19 16:08:34 +00:00
.name = "M_RESIDENT",
.title = " RES ",
.description = "Resident set size, size of the text and data sections, plus stack usage",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[ST_UID] = {
2015-09-19 16:08:34 +00:00
.name = "ST_UID",
.title = " UID ",
2015-09-19 16:08:34 +00:00
.description = "User ID of the process owner",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[PERCENT_CPU] = {
2015-09-19 16:08:34 +00:00
.name = "PERCENT_CPU",
.title = "CPU% ",
.description = "Percentage of the CPU time the process used in the last sampling",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
[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,
},
2015-09-18 04:46:48 +00:00
[PERCENT_MEM] = {
2015-09-19 16:08:34 +00:00
.name = "PERCENT_MEM",
.title = "MEM% ",
.description = "Percentage of the memory the process is using, based on resident memory size",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[USER] = {
2015-09-19 16:08:34 +00:00
.name = "USER",
.title = "USER ",
.description = "Username of the process owner (or user ID if name cannot be determined)",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[TIME] = {
2015-09-19 16:08:34 +00:00
.name = "TIME",
.title = " TIME+ ",
.description = "Total time the process has spent in user and system time",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[NLWP] = {
2015-09-19 16:08:34 +00:00
.name = "NLWP",
.title = "NLWP ",
.description = "Number of threads in the process",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[TGID] = {
2015-09-19 16:08:34 +00:00
.name = "TGID",
.title = " TGID ",
.description = "Thread group ID (i.e. process ID)",
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
[LAST_PROCESSFIELD] = {
2015-09-19 16:08:34 +00:00
.name = "*** report bug! ***",
.title = NULL,
.description = NULL,
2020-10-31 21:14:27 +00:00
.flags = 0,
},
2015-09-18 04:46:48 +00:00
};
ProcessPidColumn Process_pidColumns[] = {
{ .id = PID, .label = "PID" },
{ .id = PPID, .label = "PPID" },
{ .id = TPGID, .label = "TPGID" },
{ .id = TGID, .label = "TGID" },
{ .id = PGRP, .label = "PGRP" },
{ .id = SESSION, .label = "SESN" },
{ .id = 0, .label = NULL },
};
Process* OpenBSDProcess_new(const Settings* settings) {
2016-02-02 14:53:02 +00:00
OpenBSDProcess* this = xCalloc(sizeof(OpenBSDProcess), 1);
2015-09-18 04:46:48 +00:00
Object_setClass(this, Class(OpenBSDProcess));
Process_init(&this->super, settings);
return &this->super;
2015-09-18 04:46:48 +00:00
}
void Process_delete(Object* cast) {
OpenBSDProcess* this = (OpenBSDProcess*) cast;
Process_done((Process*)cast);
free(this);
}
static void OpenBSDProcess_writeField(const Process* this, RichString* str, ProcessField field) {
//const OpenBSDProcess* op = (const OpenBSDProcess*) this;
2015-09-18 04:46:48 +00:00
char buffer[256]; buffer[255] = '\0';
int attr = CRT_colors[DEFAULT_COLOR];
//int n = sizeof(buffer) - 1;
switch (field) {
// add OpenBSD-specific fields here
default:
Process_writeField(this, str, field);
return;
}
RichString_append(str, attr, buffer);
}
static long OpenBSDProcess_compare(const void* v1, const void* v2) {
2020-10-04 12:30:35 +00:00
const OpenBSDProcess *p1, *p2;
const Settings *settings = ((const Process*)v1)->settings;
2015-09-18 04:46:48 +00:00
if (settings->direction == 1) {
2020-10-04 12:30:35 +00:00
p1 = (const OpenBSDProcess*)v1;
p2 = (const OpenBSDProcess*)v2;
2015-09-18 04:46:48 +00:00
} else {
2020-10-04 12:30:35 +00:00
p2 = (const OpenBSDProcess*)v1;
p1 = (const OpenBSDProcess*)v2;
2015-09-18 04:46:48 +00:00
}
// remove if actually used
(void)p1; (void)p2;
2015-09-18 04:46:48 +00:00
switch (settings->sortKey) {
// add OpenBSD-specific fields here
default:
return Process_compare(v1, v2);
}
}
const ProcessClass OpenBSDProcess_class = {
.super = {
.extends = Class(Process),
.display = Process_display,
.delete = Process_delete,
.compare = OpenBSDProcess_compare
},
.writeField = OpenBSDProcess_writeField,
};
bool Process_isThread(const Process* this) {
return Process_isKernelThread(this) || Process_isUserlandThread(this);
2015-09-18 04:46:48 +00:00
}