1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
/*
** ATOP - System & Process Monitor
**
** The program 'atop' offers the possibility to view the activity of
** the system on system-level as well as process-level.
**
** Include-file describing process-level counters maintained and functions
** to access the process-database.
** ================================================================
** Author: Gerlof Langeveld
** E-mail: gerlof.langeveld@atoptool.nl
** Date: November 1996
** LINUX-port: June 2000
**
** This program is free software; you can redistribute it and/or modify it
** under the terms of the GNU General Public License as published by the
** Free Software Foundation; either version 2, or (at your option) any
** later version.
**
** This program is distributed in the hope that it will be useful, but
** WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** See the GNU General Public License for more details.
*/
#define PNAMLEN 15
#define CMDLEN 150
/*
** structure containing only relevant process-info extracted
** from kernel's process-administration
*/
struct pstat {
/* GENERAL PROCESS INFO */
struct gen {
int pid; /* process identification */
int ppid; /* parent process identification*/
int ruid; /* real user identification */
int euid; /* eff. user identification */
int suid; /* saved user identification */
int fsuid; /* fs user identification */
int rgid; /* real group identification */
int egid; /* eff. group identification */
int sgid; /* saved group identification */
int fsgid; /* fs group identification */
int nthr; /* number of threads in tgroup */
char name[PNAMLEN+1];/* process name string */
char state; /* process state ('E' = exited) */
int excode; /* process exit status */
time_t btime; /* process start time (epoch) */
time_t elaps; /* process elaps time (hertz) */
char cmdline[CMDLEN+1];/* command-line string */
int nthrslpi; /* # threads in state 'S' */
int nthrslpu; /* # threads in state 'D' */
int nthrrun; /* # threads in state 'R' */
int ifuture[1]; /* reserved */
} gen;
/* CPU STATISTICS */
struct cpu {
count_t utime; /* time user text (ticks) */
count_t stime; /* time system text (ticks) */
int nice; /* nice value */
int prio; /* priority */
int rtprio; /* realtime priority */
int policy; /* scheduling policy */
int curcpu; /* current processor */
int sleepavg; /* sleep average percentage */
int ifuture[4]; /* reserved for future use */
count_t cfuture[4]; /* reserved for future use */
} cpu;
/* DISK STATISTICS */
struct dsk {
count_t rio; /* number of read requests */
count_t rsz; /* cumulative # sectors read */
count_t wio; /* number of write requests */
count_t wsz; /* cumulative # sectors written */
count_t cwsz; /* cumulative # written sectors */
/* being cancelled */
count_t cfuture[4]; /* reserved for future use */
} dsk;
/* MEMORY STATISTICS */
struct mem {
count_t minflt; /* number of page-reclaims */
count_t majflt; /* number of page-faults */
count_t shtext; /* text memory (Kb) */
count_t vmem; /* virtual memory (Kb) */
count_t rmem; /* resident memory (Kb) */
count_t vgrow; /* virtual growth (Kb) */
count_t rgrow; /* resident growth (Kb) */
count_t cfuture[4]; /* reserved for future use */
} mem;
/* NETWORK STATISTICS */
struct net {
count_t tcpsnd; /* number of TCP-packets sent */
count_t tcpssz; /* cumulative size packets sent */
count_t tcprcv; /* number of TCP-packets recved */
count_t tcprsz; /* cumulative size packets rcvd */
count_t udpsnd; /* number of UDP-packets sent */
count_t udpssz; /* cumulative size packets sent */
count_t udprcv; /* number of UDP-packets recved */
count_t udprsz; /* cumulative size packets sent */
count_t rawsnd; /* number of raw packets sent */
count_t rawrcv; /* number of raw packets recved */
count_t cfuture[4]; /* reserved for future use */
} net;
};
struct pinfo {
struct pinfo *phnext; /* next process in hash chain */
struct pinfo *prnext; /* next process in residue chain */
struct pinfo *prprev; /* prev process in residue chain */
struct pstat pstat; /* per-process statistics */
};
/*
** prototypes of process-database functions
*/
int pdb_getproc(int, time_t, struct pinfo **);
void pdb_addproc(int, struct pinfo *);
int pdb_delproc(int);
int pdb_newproc(struct pinfo **);
int pdb_makeresidue(void);
int pdb_cleanresidue(void);
int pdb_srchresidue(struct pstat *, struct pinfo **);
/*
** prototypes for raw process-statistics functions
*/
int deviatproc(struct pstat *, int, struct pstat *, int, int,
struct pstat *, struct sstat *,
int *, int *, int *, int *);
int photoproc(struct pstat *, int);
unsigned int countprocs(void);
|