Process.h 5.71 KB
Newer Older
Hisham Muhammad's avatar
Hisham Muhammad committed
1
/* Do not edit this file. It was automatically generated. */
Hisham Muhammad's avatar
Hisham Muhammad committed
2
3
4
5
6

#ifndef HEADER_Process
#define HEADER_Process
/*
htop - Process.h
Hisham Muhammad's avatar
Hisham Muhammad committed
7
(C) 2004-2011 Hisham H. Muhammad
Hisham Muhammad's avatar
Hisham Muhammad committed
8
9
10
11
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/

12
#ifdef HAVE_LIBHWLOC
Hisham Muhammad's avatar
Hisham Muhammad committed
13
#endif
14

Hisham Muhammad's avatar
Hisham Muhammad committed
15
16
// This works only with glibc 2.1+. On earlier versions
// the behavior is similar to have a hardcoded page size.
17
#ifndef PAGE_SIZE
Hisham Muhammad's avatar
Hisham Muhammad committed
18
#define PAGE_SIZE ( sysconf(_SC_PAGESIZE) )
19
#endif
Hisham Muhammad's avatar
Hisham Muhammad committed
20
#define PAGE_SIZE_KB ( PAGE_SIZE / ONE_K )
Hisham Muhammad's avatar
Hisham Muhammad committed
21

Hisham Muhammad's avatar
Hisham Muhammad committed
22
23
#include "Object.h"
#include "Affinity.h"
24
#include "IOPriority.h"
Hisham Muhammad's avatar
Hisham Muhammad committed
25
#include <sys/types.h>
Hisham Muhammad's avatar
Hisham Muhammad committed
26

27
28
29
30
31
32
#define PROCESS_FLAG_IO 1
#define PROCESS_FLAG_IOPRIO 2
#define PROCESS_FLAG_OPENVZ 4
#define PROCESS_FLAG_VSERVER 8
#define PROCESS_FLAG_CGROUP 16

33
34
35
36
37
38
39
#ifndef Process_isKernelThread
#define Process_isKernelThread(_process) (_process->pgrp == 0)
#endif

#ifndef Process_isUserlandThread
#define Process_isUserlandThread(_process) (_process->pid != _process->tgid)
#endif
Hisham Muhammad's avatar
Hisham Muhammad committed
40

Hisham Muhammad's avatar
Hisham Muhammad committed
41
#ifndef Process_isThread
42
#define Process_isThread(_process) (Process_isUserlandThread(_process) || Process_isKernelThread(_process))
Hisham Muhammad's avatar
Hisham Muhammad committed
43
44
#endif

Hisham Muhammad's avatar
Hisham Muhammad committed
45
46
47
48
49
typedef enum ProcessField_ {
   PID = 1, COMM, 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, 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,
50
   USER, TIME, NLWP, TGID,
51
   #ifdef HAVE_OPENVZ
52
   CTID, VPID,
53
   #endif
Hisham Muhammad's avatar
Hisham Muhammad committed
54
55
56
   #ifdef HAVE_VSERVER
   VXID,
   #endif
57
   #ifdef HAVE_TASKSTATS
58
   RCHAR, WCHAR, SYSCR, SYSCW, RBYTES, WBYTES, CNCLWB, IO_READ_RATE, IO_WRITE_RATE, IO_RATE,
59
   #endif
60
61
62
   #ifdef HAVE_CGROUP
   CGROUP,
   #endif
63
64
65
   #ifdef HAVE_OOM
   OOM,
   #endif
66
   IO_PRIORITY,
67
   LAST_PROCESSFIELD
Hisham Muhammad's avatar
Hisham Muhammad committed
68
69
70
71
72
73
74
75
76
} ProcessField;

struct ProcessList_;

typedef struct Process_ {
   Object super;

   struct ProcessList_ *pl;

Hisham Muhammad's avatar
Hisham Muhammad committed
77
   pid_t pid;
Hisham Muhammad's avatar
Hisham Muhammad committed
78
79
80
81
   char* comm;
   int indent;
   char state;
   bool tag;
Hisham Muhammad's avatar
Hisham Muhammad committed
82
   bool showChildren;
83
   bool show;
Hisham Muhammad's avatar
Hisham Muhammad committed
84
   pid_t ppid;
85
86
87
   unsigned int pgrp;
   unsigned int session;
   unsigned int tty_nr;
Hisham Muhammad's avatar
Hisham Muhammad committed
88
   pid_t tgid;
89
   int tpgid;
Hisham Muhammad's avatar
Hisham Muhammad committed
90
   unsigned long int flags;
Hisham Muhammad's avatar
Hisham Muhammad committed
91
92
93
94
95
96

   uid_t st_uid;
   float percent_cpu;
   float percent_mem;
   char* user;

97
98
99
100
   unsigned long long int utime;
   unsigned long long int stime;
   unsigned long long int cutime;
   unsigned long long int cstime;
Hisham Muhammad's avatar
Hisham Muhammad committed
101
102
   long int priority;
   long int nice;
103
   long int nlwp;
104
   IOPriority ioPriority;
Hisham Muhammad's avatar
Hisham Muhammad committed
105
106
   char starttime_show[8];
   time_t starttime_ctime;
Hisham Muhammad's avatar
Hisham Muhammad committed
107
108
109
110
111
112
113
114
115
116
117
118
119

   #ifdef HAVE_TASKSTATS
   unsigned long long io_rchar;
   unsigned long long io_wchar;
   unsigned long long io_syscr;
   unsigned long long io_syscw;
   unsigned long long io_read_bytes;
   unsigned long long io_write_bytes;
   unsigned long long io_cancelled_write_bytes;
   double io_rate_read_bps;
   unsigned long long io_rate_read_time;
   double io_rate_write_bps;
   unsigned long long io_rate_write_time;   
120
   #endif
Hisham Muhammad's avatar
Hisham Muhammad committed
121

Hisham Muhammad's avatar
Hisham Muhammad committed
122
   int processor;
123
124
125
126
127
128
129
   long m_size;
   long m_resident;
   long m_share;
   long m_trs;
   long m_drs;
   long m_lrs;
   long m_dt;
Hisham Muhammad's avatar
Hisham Muhammad committed
130

131
   #ifdef HAVE_OPENVZ
132
   unsigned int ctid;
133
134
   unsigned int vpid;
   #endif
Hisham Muhammad's avatar
Hisham Muhammad committed
135
136
137
   #ifdef HAVE_VSERVER
   unsigned int vxid;
   #endif
Hisham Muhammad's avatar
Hisham Muhammad committed
138

139
140
141
   #ifdef HAVE_CGROUP
   char* cgroup;
   #endif
142
143
144
   #ifdef HAVE_OOM
   unsigned int oom;
   #endif
Hisham Muhammad's avatar
Hisham Muhammad committed
145
146

   int exit_signal;
147
   int basenameOffset;
Hisham Muhammad's avatar
Hisham Muhammad committed
148
149
150
151
152
153
   bool updated;

   unsigned long int minflt;
   unsigned long int cminflt;
   unsigned long int majflt;
   unsigned long int cmajflt;
154
   #ifdef DEBUG
Hisham Muhammad's avatar
Hisham Muhammad committed
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
   long int itrealvalue;
   unsigned long int vsize;
   long int rss;
   unsigned long int rlim;
   unsigned long int startcode;
   unsigned long int endcode;
   unsigned long int startstack;
   unsigned long int kstkesp;
   unsigned long int kstkeip;
   unsigned long int signal;
   unsigned long int blocked;
   unsigned long int sigignore;
   unsigned long int sigcatch;
   unsigned long int wchan;
   unsigned long int nswap;
   unsigned long int cnswap;
   #endif

Hisham Muhammad's avatar
Hisham Muhammad committed
173
174
175
} Process;


Hisham Muhammad's avatar
Hisham Muhammad committed
176
extern const char *Process_fieldNames[];
Hisham Muhammad's avatar
Hisham Muhammad committed
177

178
179
extern const int Process_fieldFlags[];

Hisham Muhammad's avatar
Hisham Muhammad committed
180
extern const char *Process_fieldTitles[];
181

182
183
184

void Process_getMaxPid();

185
#define ONE_K 1024L
186
187
#define ONE_M (ONE_K * ONE_K)
#define ONE_G (ONE_M * ONE_K)
Hisham Muhammad's avatar
Hisham Muhammad committed
188

189
#define ONE_DECIMAL_K 1000L
Hisham Muhammad's avatar
Hisham Muhammad committed
190
#define ONE_DECIMAL_M (ONE_DECIMAL_K * ONE_DECIMAL_K)
191
#define ONE_DECIMAL_G (ONE_DECIMAL_M * ONE_DECIMAL_K)
Hisham Muhammad's avatar
Hisham Muhammad committed
192

Hisham Muhammad's avatar
Hisham Muhammad committed
193
194
void Process_delete(Object* cast);

195
196
extern ObjectClass Process_class;

197
198
Process* Process_new(struct ProcessList_ *pl);

Hisham Muhammad's avatar
Hisham Muhammad committed
199
200
void Process_toggleTag(Process* this);

201
bool Process_setPriority(Process* this, int priority);
Hisham Muhammad's avatar
Hisham Muhammad committed
202

203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
bool Process_changePriorityBy(Process* this, size_t delta);

IOPriority Process_updateIOPriority(Process* this);

bool Process_setIOPriority(Process* this, IOPriority ioprio);

/*
[1] Note that before kernel 2.6.26 a process that has not asked for
an io priority formally uses "none" as scheduling class, but the
io scheduler will treat such processes as if it were in the best
effort class. The priority within the best effort class will  be
dynamically  derived  from  the  cpu  nice level of the process:
extern io_priority;
*/
#define Process_effectiveIOPriority(p_) (IOPriority_class(p_->ioPriority) == IOPRIO_CLASS_NONE ? IOPriority_tuple(IOPRIO_CLASS_BE, (p_->nice + 20) / 5) : p_->ioPriority)

219
#ifdef HAVE_LIBHWLOC
220

221
Affinity* Process_getAffinity(Process* this);
222

223
bool Process_setAffinity(Process* this, Affinity* affinity);
224
225
226
227
228
229
230

#elif HAVE_NATIVE_AFFINITY

Affinity* Process_getAffinity(Process* this);

bool Process_setAffinity(Process* this, Affinity* affinity);

Hisham Muhammad's avatar
Hisham Muhammad committed
231
#endif
232

233
void Process_sendSignal(Process* this, size_t sgn);
Hisham Muhammad's avatar
Hisham Muhammad committed
234

235
236
237
int Process_pidCompare(const void* v1, const void* v2);

int Process_compare(const void* v1, const void* v2);
Hisham Muhammad's avatar
Hisham Muhammad committed
238
239

#endif