aboutsummaryrefslogtreecommitdiffstats
path: root/Process.c
diff options
context:
space:
mode:
authorDaniel Lange <DLange@git.local>2016-04-11 13:00:22 +0200
committerDaniel Lange <DLange@git.local>2016-04-11 13:00:22 +0200
commit9379132a8234eeedf62d37ef57713e52c12db6ab (patch)
tree3c1e0d924af0d44be9b14cab8ea1c05a946cdfe3 /Process.c
parent9675cf654d86464344e56705db7a71ea17f76c6f (diff)
downloaddebian_htop-9379132a8234eeedf62d37ef57713e52c12db6ab.tar.gz
debian_htop-9379132a8234eeedf62d37ef57713e52c12db6ab.tar.bz2
debian_htop-9379132a8234eeedf62d37ef57713e52c12db6ab.zip
Imported Upstream version 0.7upstream/0.7
Diffstat (limited to 'Process.c')
-rw-r--r--Process.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/Process.c b/Process.c
index 71840f4..ed49bac 100644
--- a/Process.c
+++ b/Process.c
@@ -25,6 +25,7 @@ in the source distribution for its full text.
#include <string.h>
#include <stdbool.h>
#include <pwd.h>
+#include <sched.h>
// This works only with glibc 2.1+. On earlier versions
// the behavior is similar to have a hardcoded page size.
@@ -41,7 +42,7 @@ typedef enum ProcessField_ {
STIME, CUTIME, CSTIME, PRIORITY, NICE, ITREALVALUE, STARTTIME, VSIZE, RSS, RLIM, STARTCODE, ENDCODE,
STARTSTACK, KSTKESP, KSTKEIP, SIGNAL, BLOCKED, SSIGIGNORE, SIGCATCH, WCHAN, NSWAP, CNSWAP, EXIT_SIGNAL,
PROCESSOR, M_SIZE, M_RESIDENT, M_SHARE, M_TRS, M_DRS, M_LRS, M_DT, ST_UID, PERCENT_CPU, PERCENT_MEM,
- USER, TIME, NLWP,
+ USER, TIME, NLWP, TGID
#ifdef HAVE_OPENVZ
VEID, VPID,
#endif
@@ -65,7 +66,8 @@ typedef struct Process_ {
unsigned int pgrp;
unsigned int session;
unsigned int tty_nr;
- unsigned int tpgid;
+ unsigned int tgid;
+ int tpgid;
unsigned long int flags;
#ifdef DEBUG
unsigned long int minflt;
@@ -127,7 +129,7 @@ char* PROCESS_CLASS = "Process";
#endif
char *Process_fieldNames[] = {
- "", "PID", "Command", "STATE", "PPID", "PGRP", "SESSION", "TTY_NR", "TPGID", "FLAGS", "MINFLT", "CMINFLT", "MAJFLT", "CMAJFLT", "UTIME", "STIME", "CUTIME", "CSTIME", "PRIORITY", "NICE", "ITREALVALUE", "STARTTIME", "VSIZE", "RSS", "RLIM", "STARTCODE", "ENDCODE", "STARTSTACK", "KSTKESP", "KSTKEIP", "SIGNAL", "BLOCKED", "SIGIGNORE", "SIGCATCH", "WCHAN", "NSWAP", "CNSWAP", "EXIT_SIGNAL", "PROCESSOR", "M_SIZE", "M_RESIDENT", "M_SHARE", "M_TRS", "M_DRS", "M_LRS", "M_DT", "ST_UID", "PERCENT_CPU", "PERCENT_MEM", "USER", "TIME", "NLWP",
+ "", "PID", "Command", "STATE", "PPID", "PGRP", "SESSION", "TTY_NR", "TPGID", "FLAGS", "MINFLT", "CMINFLT", "MAJFLT", "CMAJFLT", "UTIME", "STIME", "CUTIME", "CSTIME", "PRIORITY", "NICE", "ITREALVALUE", "STARTTIME", "VSIZE", "RSS", "RLIM", "STARTCODE", "ENDCODE", "STARTSTACK", "KSTKESP", "KSTKEIP", "SIGNAL", "BLOCKED", "SIGIGNORE", "SIGCATCH", "WCHAN", "NSWAP", "CNSWAP", "EXIT_SIGNAL", "PROCESSOR", "M_SIZE", "M_RESIDENT", "M_SHARE", "M_TRS", "M_DRS", "M_LRS", "M_DT", "ST_UID", "PERCENT_CPU", "PERCENT_MEM", "USER", "TIME", "NLWP", "TGID",
#ifdef HAVE_OPENVZ
"VEID", "VPID",
#endif
@@ -193,6 +195,16 @@ void Process_setPriority(Process* this, int priority) {
}
}
+unsigned long Process_getAffinity(Process* this) {
+ unsigned long mask = 0;
+ sched_getaffinity(this->pid, sizeof(unsigned long), (cpu_set_t*) &mask);
+ return mask;
+}
+
+void Process_setAffinity(Process* this, unsigned long mask) {
+ sched_setaffinity(this->pid, sizeof(unsigned long), (cpu_set_t*) &mask);
+}
+
void Process_sendSignal(Process* this, int signal) {
kill(this->pid, signal);
}
@@ -281,7 +293,8 @@ void Process_writeField(Process* this, RichString* str, ProcessField field) {
case PGRP: snprintf(buffer, n, "%5u ", this->pgrp); break;
case SESSION: snprintf(buffer, n, "%5u ", this->session); break;
case TTY_NR: snprintf(buffer, n, "%5u ", this->tty_nr); break;
- case TPGID: snprintf(buffer, n, "%5u ", this->tpgid); break;
+ case TGID: snprintf(buffer, n, "%5u ", this->tgid); break;
+ case TPGID: snprintf(buffer, n, "%5d ", this->tpgid); break;
case PROCESSOR: snprintf(buffer, n, "%3d ", this->processor+1); break;
case NLWP: snprintf(buffer, n, "%4ld ", this->nlwp); break;
case COMM: {
@@ -462,7 +475,8 @@ char* Process_printField(ProcessField field) {
case PGRP: return " PGRP ";
case SESSION: return " SESN ";
case TTY_NR: return " TTY ";
- case TPGID: return " TGID ";
+ case TGID: return " TGID ";
+ case TPGID: return "TPGID ";
case COMM: return "Command ";
case STATE: return "S ";
case PRIORITY: return "PRI ";

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