summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Panteleev <git@thecybershadow.net>2018-01-14 09:08:20 +0000
committerHisham Muhammad <hisham@gobolinux.org>2018-02-04 16:44:21 +0100
commit87be623eac49676ef0ac8e95733308dc12e37582 (patch)
treebc1b21599a7258865b2eb1800da791b11fe32745
parentb27712181aa27ae1e993f1a505c8e3717e709244 (diff)
Add support for Linux TASK_IDLE
Linux commit 06eb61844d841d0032a9950ce7f8e783ee49c0d0 ("sched/debug: Add explicit TASK_IDLE printing") exposes kthreads idling using TASK_IDLE in procfs as "I (idle)". Until now, when sorting the STATE ("S") column, htop used the raw value of the state character for comparison, however that led to the undesirable effect of TASK_IDLE ('I') tasks being sorted above tasks that were running ('R'). Thus, explicitly recognize the idle process state, and sort it below others.
-rw-r--r--Process.c4
-rw-r--r--Process.h2
-rw-r--r--linux/LinuxProcess.c2
3 files changed, 6 insertions, 2 deletions
diff --git a/Process.c b/Process.c
index 6551afd7..18360802 100644
--- a/Process.c
+++ b/Process.c
@@ -174,6 +174,8 @@ typedef struct ProcessClass_ {
#define Process_isChildOf(process_, pid_) (process_->tgid == pid_ || (process_->tgid == process_->pid && process_->ppid == pid_))
+#define Process_sortState(state) ((state) == 'I' ? 0x100 : (state))
+
}*/
static int Process_getuid = -1;
@@ -598,7 +600,7 @@ long Process_compare(const void* v1, const void* v2) {
return (p1->starttime_ctime - p2->starttime_ctime);
}
case STATE:
- return (p1->state - p2->state);
+ return (Process_sortState(p1->state) - Process_sortState(p2->state));
case ST_UID:
return (p1->st_uid - p2->st_uid);
case TIME:
diff --git a/Process.h b/Process.h
index 5b8ffdba..5179bb6f 100644
--- a/Process.h
+++ b/Process.h
@@ -153,6 +153,8 @@ typedef struct ProcessClass_ {
#define Process_isChildOf(process_, pid_) (process_->tgid == pid_ || (process_->tgid == process_->pid && process_->ppid == pid_))
+#define Process_sortState(state) ((state) == 'I' ? 0x100 : (state))
+
#define ONE_K 1024L
#define ONE_M (ONE_K * ONE_K)
diff --git a/linux/LinuxProcess.c b/linux/LinuxProcess.c
index 72408cfa..39b5647e 100644
--- a/linux/LinuxProcess.c
+++ b/linux/LinuxProcess.c
@@ -155,7 +155,7 @@ ProcessFieldData Process_fields[] = {
[0] = { .name = "", .title = NULL, .description = NULL, .flags = 0, },
[PID] = { .name = "PID", .title = " PID ", .description = "Process/thread ID", .flags = 0, },
[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, },
+ [STATE] = { .name = "STATE", .title = "S ", .description = "Process state (S sleeping, R running, D disk, Z zombie, T traced, W paging, I idle)", .flags = 0, },
[PPID] = { .name = "PPID", .title = " PPID ", .description = "Parent process ID", .flags = 0, },
[PGRP] = { .name = "PGRP", .title = " PGRP ", .description = "Process group ID", .flags = 0, },
[SESSION] = { .name = "SESSION", .title = " SID ", .description = "Process's session ID", .flags = 0, },

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