library: normalize & minimize result types, <PIDS> api
This commit attempts to minimize the variety of types currently used. Plus, the following were also changed: . the MEM fields were switched to parallel the VM guys . PIDS_MEM_VIRT -> PIDS_MEM_VIRT_PGS . PIDS_MEM_VIRT_KIB -> PIDS_MEM_VIRT . made NICE 's_int' so that it then parallels PRIORITY . change RTPRIO & SCHED_CLASS from 'ul_int' to 's_int' . removed Item_table 'oldflags' for an obsoleted field . PIDS_WCHAN_ADDR . added calculations like TICS_ALL_C for the following . PIDS_TICS_USER_C . PIDS_TICS_SYSTEM_C . these three new 'TICS' fields have been incorporated . PIDS_TICS_BLKIO - jiffies spent in block i/o . PIDS_TICS_GUEST - jiffies spent as a guest . PIDS_TICS_GUEST_C - as above, includes dead children . that PIDS_TICS_DELTA was renamed PIDS_TICS_ALL_DELTA ( so it did not hide between TICS_BLKIO & TICS_GUEST ) ( and to make clearer what's included: utime + stime ) . eliminated 'sl_int' entirely from that result struct [ often, the <pids> module changes necessitated that ] [ readproc header and source files had to change too ] Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
parent
01beb85f7d
commit
c4aa6c0ab4
183
proc/pids.c
183
proc/pids.c
@ -134,14 +134,14 @@ static char** vectorize_this (const char* src) {
|
|||||||
else R->result.strv = vectorize_this("[ duplicate " STRINGIFY(e) " ]"); }
|
else R->result.strv = vectorize_this("[ duplicate " STRINGIFY(e) " ]"); }
|
||||||
|
|
||||||
|
|
||||||
setDECL(noop) { (void)I; (void)R; (void)P; return; }
|
setDECL(noop) { (void)I; (void)R; (void)P; return; }
|
||||||
setDECL(extra) { (void)I; (void)R; (void)P; return; }
|
setDECL(extra) { (void)I; (void)R; (void)P; return; }
|
||||||
REG_set(ADDR_END_CODE, ul_int, end_code)
|
REG_set(ADDR_END_CODE, ul_int, end_code)
|
||||||
REG_set(ADDR_KSTK_EIP, ul_int, kstk_eip)
|
REG_set(ADDR_KSTK_EIP, ul_int, kstk_eip)
|
||||||
REG_set(ADDR_KSTK_ESP, ul_int, kstk_esp)
|
REG_set(ADDR_KSTK_ESP, ul_int, kstk_esp)
|
||||||
REG_set(ADDR_START_CODE, ul_int, start_code)
|
REG_set(ADDR_START_CODE, ul_int, start_code)
|
||||||
REG_set(ADDR_START_STACK, ul_int, start_stack)
|
REG_set(ADDR_START_STACK, ul_int, start_stack)
|
||||||
REG_set(ALARM, sl_int, alarm)
|
REG_set(ALARM, ul_int, alarm)
|
||||||
STR_set(CGNAME, cgname)
|
STR_set(CGNAME, cgname)
|
||||||
STR_set(CGROUP, cgroup)
|
STR_set(CGROUP, cgroup)
|
||||||
VEC_set(CGROUP_V, cgroup_v)
|
VEC_set(CGROUP_V, cgroup_v)
|
||||||
@ -152,12 +152,12 @@ STR_set(ENVIRON, environ)
|
|||||||
VEC_set(ENVIRON_V, environ_v)
|
VEC_set(ENVIRON_V, environ_v)
|
||||||
REG_set(EXIT_SIGNAL, s_int, exit_signal)
|
REG_set(EXIT_SIGNAL, s_int, exit_signal)
|
||||||
REG_set(FLAGS, ul_int, flags)
|
REG_set(FLAGS, ul_int, flags)
|
||||||
REG_set(FLT_MAJ, sl_int, maj_flt)
|
REG_set(FLT_MAJ, ul_int, maj_flt)
|
||||||
REG_set(FLT_MAJ_C, sl_int, cmaj_flt)
|
REG_set(FLT_MAJ_C, ul_int, cmaj_flt)
|
||||||
REG_set(FLT_MAJ_DELTA, sl_int, maj_delta)
|
REG_set(FLT_MAJ_DELTA, s_int, maj_delta)
|
||||||
REG_set(FLT_MIN, sl_int, min_flt)
|
REG_set(FLT_MIN, ul_int, min_flt)
|
||||||
REG_set(FLT_MIN_C, sl_int, cmin_flt)
|
REG_set(FLT_MIN_C, ul_int, cmin_flt)
|
||||||
REG_set(FLT_MIN_DELTA, sl_int, min_delta)
|
REG_set(FLT_MIN_DELTA, s_int, min_delta)
|
||||||
REG_set(ID_EGID, u_int, egid)
|
REG_set(ID_EGID, u_int, egid)
|
||||||
REG_set(ID_EGROUP, str, egroup)
|
REG_set(ID_EGROUP, str, egroup)
|
||||||
REG_set(ID_EUID, u_int, euid)
|
REG_set(ID_EUID, u_int, euid)
|
||||||
@ -181,19 +181,19 @@ REG_set(ID_SUSER, str, suser)
|
|||||||
REG_set(ID_TGID, s_int, tgid)
|
REG_set(ID_TGID, s_int, tgid)
|
||||||
REG_set(ID_TPGID, s_int, tpgid)
|
REG_set(ID_TPGID, s_int, tpgid)
|
||||||
REG_set(LXCNAME, str, lxcname)
|
REG_set(LXCNAME, str, lxcname)
|
||||||
REG_set(MEM_CODE, sl_int, trs)
|
CVT_set(MEM_CODE, ul_int, trs)
|
||||||
CVT_set(MEM_CODE_KIB, sl_int, trs)
|
REG_set(MEM_CODE_PGS, ul_int, trs)
|
||||||
REG_set(MEM_DATA, sl_int, drs)
|
CVT_set(MEM_DATA, ul_int, drs)
|
||||||
CVT_set(MEM_DATA_KIB, sl_int, drs)
|
REG_set(MEM_DATA_PGS, ul_int, drs)
|
||||||
REG_set(MEM_DT, sl_int, dt)
|
REG_set(MEM_DT_PGS, ul_int, dt)
|
||||||
REG_set(MEM_LRS, sl_int, lrs)
|
REG_set(MEM_LRS_PGS, ul_int, lrs)
|
||||||
REG_set(MEM_RES, sl_int, resident)
|
CVT_set(MEM_RES, ul_int, resident)
|
||||||
CVT_set(MEM_RES_KIB, sl_int, resident)
|
REG_set(MEM_RES_PGS, ul_int, resident)
|
||||||
REG_set(MEM_SHR, sl_int, share)
|
CVT_set(MEM_SHR, ul_int, share)
|
||||||
CVT_set(MEM_SHR_KIB, ul_int, share)
|
REG_set(MEM_SHR_PGS, ul_int, share)
|
||||||
REG_set(MEM_VIRT, sl_int, size)
|
CVT_set(MEM_VIRT, ul_int, size)
|
||||||
CVT_set(MEM_VIRT_KIB, sl_int, size)
|
REG_set(MEM_VIRT_PGS, ul_int, size)
|
||||||
REG_set(NICE, sl_int, nice)
|
REG_set(NICE, s_int, nice)
|
||||||
REG_set(NLWP, s_int, nlwp)
|
REG_set(NLWP, s_int, nlwp)
|
||||||
REG_set(NS_IPC, ul_int, ns.ns[0])
|
REG_set(NS_IPC, ul_int, ns.ns[0])
|
||||||
REG_set(NS_MNT, ul_int, ns.ns[1])
|
REG_set(NS_MNT, ul_int, ns.ns[1])
|
||||||
@ -205,10 +205,10 @@ REG_set(OOM_ADJ, s_int, oom_adj)
|
|||||||
REG_set(OOM_SCORE, s_int, oom_score)
|
REG_set(OOM_SCORE, s_int, oom_score)
|
||||||
REG_set(PRIORITY, s_int, priority)
|
REG_set(PRIORITY, s_int, priority)
|
||||||
REG_set(PROCESSOR, u_int, processor)
|
REG_set(PROCESSOR, u_int, processor)
|
||||||
REG_set(RSS, sl_int, rss)
|
REG_set(RSS, ul_int, rss)
|
||||||
REG_set(RSS_RLIM, ul_int, rss_rlim)
|
REG_set(RSS_RLIM, ul_int, rss_rlim)
|
||||||
REG_set(RTPRIO, ul_int, rtprio)
|
REG_set(RTPRIO, s_int, rtprio)
|
||||||
REG_set(SCHED_CLASS, ul_int, sched)
|
REG_set(SCHED_CLASS, s_int, sched)
|
||||||
STR_set(SD_MACH, sd_mach)
|
STR_set(SD_MACH, sd_mach)
|
||||||
STR_set(SD_OUID, sd_ouid)
|
STR_set(SD_OUID, sd_ouid)
|
||||||
STR_set(SD_SEAT, sd_seat)
|
STR_set(SD_SEAT, sd_seat)
|
||||||
@ -224,34 +224,37 @@ DUP_set(SIGPENDING, _sigpnd)
|
|||||||
REG_set(STATE, s_ch, state)
|
REG_set(STATE, s_ch, state)
|
||||||
STR_set(SUPGIDS, supgid)
|
STR_set(SUPGIDS, supgid)
|
||||||
STR_set(SUPGROUPS, supgrp)
|
STR_set(SUPGROUPS, supgrp)
|
||||||
setDECL(TICS_ALL) { (void)I; R->result.ull_int = P->utime + P->stime; }
|
setDECL(TICS_ALL) { (void)I; R->result.ull_int = P->utime + P->stime; }
|
||||||
setDECL(TICS_ALL_C) { (void)I; R->result.ull_int = P->utime + P->stime + P->cutime + P->cstime; }
|
setDECL(TICS_ALL_C) { (void)I; R->result.ull_int = P->utime + P->stime + P->cutime + P->cstime; }
|
||||||
REG_set(TICS_DELTA, sl_int, pcpu)
|
REG_set(TICS_ALL_DELTA, s_int, pcpu)
|
||||||
|
REG_set(TICS_BLKIO, ull_int, blkio_tics)
|
||||||
|
REG_set(TICS_GUEST, ull_int, gtime)
|
||||||
|
setDECL(TICS_GUEST_C) { (void)I; R->result.ull_int = P->gtime + P->cgtime; }
|
||||||
REG_set(TICS_SYSTEM, ull_int, stime)
|
REG_set(TICS_SYSTEM, ull_int, stime)
|
||||||
REG_set(TICS_SYSTEM_C, ull_int, cstime)
|
setDECL(TICS_SYSTEM_C) { (void)I; R->result.ull_int = P->stime + P->cstime; }
|
||||||
REG_set(TICS_USER, ull_int, utime)
|
REG_set(TICS_USER, ull_int, utime)
|
||||||
REG_set(TICS_USER_C, ull_int, cutime)
|
setDECL(TICS_USER_C) { (void)I; R->result.ull_int = P->utime + P->cutime; }
|
||||||
setDECL(TIME_ALL) { R->result.ull_int = (P->utime + P->stime) / I->hertz; }
|
setDECL(TIME_ALL) { R->result.ull_int = (P->utime + P->stime) / I->hertz; }
|
||||||
setDECL(TIME_ELAPSED) { R->result.ull_int = (I->boot_seconds >= (P->start_time / I->hertz)) ? I->boot_seconds - (P->start_time / I->hertz) : 0; }
|
setDECL(TIME_ELAPSED) { unsigned long long t = P->start_time / I->hertz; R->result.ull_int = I->boot_seconds >= t ? (I->boot_seconds - t) : 0; }
|
||||||
REG_set(TIME_START, ull_int, start_time)
|
REG_set(TIME_START, ull_int, start_time)
|
||||||
REG_set(TTY, s_int, tty)
|
REG_set(TTY, s_int, tty)
|
||||||
setDECL(TTY_NAME) { char buf[64]; (void)I; dev_to_tty(buf, sizeof(buf), P->tty, P->tid, ABBREV_DEV); R->result.str = strdup(buf); }
|
setDECL(TTY_NAME) { char buf[64]; (void)I; dev_to_tty(buf, sizeof(buf), P->tty, P->tid, ABBREV_DEV); R->result.str = strdup(buf); }
|
||||||
setDECL(TTY_NUMBER) { char buf[64]; (void)I; dev_to_tty(buf, sizeof(buf), P->tty, P->tid, ABBREV_DEV|ABBREV_TTY|ABBREV_PTS); R->result.str = strdup(buf); }
|
setDECL(TTY_NUMBER) { char buf[64]; (void)I; dev_to_tty(buf, sizeof(buf), P->tty, P->tid, ABBREV_DEV|ABBREV_TTY|ABBREV_PTS); R->result.str = strdup(buf); }
|
||||||
REG_set(VM_DATA, sl_int, vm_data)
|
REG_set(VM_DATA, ul_int, vm_data)
|
||||||
REG_set(VM_EXE, sl_int, vm_exe)
|
REG_set(VM_EXE, ul_int, vm_exe)
|
||||||
REG_set(VM_LIB, sl_int, vm_lib)
|
REG_set(VM_LIB, ul_int, vm_lib)
|
||||||
REG_set(VM_RSS, sl_int, vm_rss)
|
REG_set(VM_RSS, ul_int, vm_rss)
|
||||||
REG_set(VM_RSS_ANON, sl_int, vm_rss_anon)
|
REG_set(VM_RSS_ANON, ul_int, vm_rss_anon)
|
||||||
REG_set(VM_RSS_FILE, sl_int, vm_rss_file)
|
REG_set(VM_RSS_FILE, ul_int, vm_rss_file)
|
||||||
REG_set(VM_RSS_LOCKED, sl_int, vm_lock)
|
REG_set(VM_RSS_LOCKED, ul_int, vm_lock)
|
||||||
REG_set(VM_RSS_SHARED, sl_int, vm_rss_shared)
|
REG_set(VM_RSS_SHARED, ul_int, vm_rss_shared)
|
||||||
REG_set(VM_SIZE, sl_int, vm_size)
|
REG_set(VM_SIZE, ul_int, vm_size)
|
||||||
REG_set(VM_STACK, sl_int, vm_stack)
|
REG_set(VM_STACK, ul_int, vm_stack)
|
||||||
REG_set(VM_SWAP, sl_int, vm_swap)
|
REG_set(VM_SWAP, ul_int, vm_swap)
|
||||||
setDECL(VM_USED) { (void)I; R->result.sl_int = P->vm_swap + P->vm_rss; }
|
setDECL(VM_USED) { (void)I; R->result.ul_int = P->vm_swap + P->vm_rss; }
|
||||||
REG_set(VSIZE_PGS, ul_int, vsize)
|
REG_set(VSIZE_PGS, ul_int, vsize)
|
||||||
REG_set(WCHAN_ADDR, ul_int, wchan)
|
REG_set(WCHAN_ADDR, ul_int, wchan)
|
||||||
setDECL(WCHAN_NAME) { (void)I; R->result.str = strdup(lookup_wchan(P->tid)); }
|
setDECL(WCHAN_NAME) { (void)I; R->result.str = strdup(lookup_wchan(P->tid)); }
|
||||||
|
|
||||||
#undef setDECL
|
#undef setDECL
|
||||||
#undef CVT_set
|
#undef CVT_set
|
||||||
@ -299,7 +302,6 @@ struct sort_parms {
|
|||||||
|
|
||||||
NUM_srt(s_ch)
|
NUM_srt(s_ch)
|
||||||
NUM_srt(s_int)
|
NUM_srt(s_int)
|
||||||
NUM_srt(sl_int)
|
|
||||||
|
|
||||||
REG_srt(u_int)
|
REG_srt(u_int)
|
||||||
REG_srt(ul_int)
|
REG_srt(ul_int)
|
||||||
@ -389,7 +391,7 @@ static struct {
|
|||||||
{ RS(ADDR_KSTK_ESP), f_stat, NULL, QS(ul_int), 0 },
|
{ RS(ADDR_KSTK_ESP), f_stat, NULL, QS(ul_int), 0 },
|
||||||
{ RS(ADDR_START_CODE), f_stat, NULL, QS(ul_int), 0 },
|
{ RS(ADDR_START_CODE), f_stat, NULL, QS(ul_int), 0 },
|
||||||
{ RS(ADDR_START_STACK), f_stat, NULL, QS(ul_int), 0 },
|
{ RS(ADDR_START_STACK), f_stat, NULL, QS(ul_int), 0 },
|
||||||
{ RS(ALARM), f_stat, NULL, QS(sl_int), 0 },
|
{ RS(ALARM), f_stat, NULL, QS(ul_int), 0 },
|
||||||
{ RS(CGNAME), x_cgroup, FF(str), QS(str), 0 },
|
{ RS(CGNAME), x_cgroup, FF(str), QS(str), 0 },
|
||||||
{ RS(CGROUP), x_cgroup, FF(str), QS(str), 0 },
|
{ RS(CGROUP), x_cgroup, FF(str), QS(str), 0 },
|
||||||
{ RS(CGROUP_V), v_cgroup, FF(strv), QS(strv), 0 },
|
{ RS(CGROUP_V), v_cgroup, FF(strv), QS(strv), 0 },
|
||||||
@ -400,12 +402,12 @@ static struct {
|
|||||||
{ RS(ENVIRON_V), v_env, FF(strv), QS(strv), 0 },
|
{ RS(ENVIRON_V), v_env, FF(strv), QS(strv), 0 },
|
||||||
{ RS(EXIT_SIGNAL), f_stat, NULL, QS(s_int), 0 },
|
{ RS(EXIT_SIGNAL), f_stat, NULL, QS(s_int), 0 },
|
||||||
{ RS(FLAGS), f_stat, NULL, QS(ul_int), 0 },
|
{ RS(FLAGS), f_stat, NULL, QS(ul_int), 0 },
|
||||||
{ RS(FLT_MAJ), f_stat, NULL, QS(sl_int), 0 },
|
{ RS(FLT_MAJ), f_stat, NULL, QS(ul_int), 0 },
|
||||||
{ RS(FLT_MAJ_C), f_stat, NULL, QS(sl_int), 0 },
|
{ RS(FLT_MAJ_C), f_stat, NULL, QS(ul_int), 0 },
|
||||||
{ RS(FLT_MAJ_DELTA), f_stat, NULL, QS(sl_int), +1 },
|
{ RS(FLT_MAJ_DELTA), f_stat, NULL, QS(s_int), +1 },
|
||||||
{ RS(FLT_MIN), f_stat, NULL, QS(sl_int), 0 },
|
{ RS(FLT_MIN), f_stat, NULL, QS(ul_int), 0 },
|
||||||
{ RS(FLT_MIN_C), f_stat, NULL, QS(sl_int), 0 },
|
{ RS(FLT_MIN_C), f_stat, NULL, QS(ul_int), 0 },
|
||||||
{ RS(FLT_MIN_DELTA), f_stat, NULL, QS(sl_int), +1 },
|
{ RS(FLT_MIN_DELTA), f_stat, NULL, QS(s_int), +1 },
|
||||||
{ RS(ID_EGID), 0, NULL, QS(u_int), 0 }, // oldflags: free w/ simple_read
|
{ RS(ID_EGID), 0, NULL, QS(u_int), 0 }, // oldflags: free w/ simple_read
|
||||||
{ RS(ID_EGROUP), f_grp, NULL, QS(str), 0 },
|
{ RS(ID_EGROUP), f_grp, NULL, QS(str), 0 },
|
||||||
{ RS(ID_EUID), 0, NULL, QS(u_int), 0 }, // oldflags: free w/ simple_read
|
{ RS(ID_EUID), 0, NULL, QS(u_int), 0 }, // oldflags: free w/ simple_read
|
||||||
@ -429,19 +431,19 @@ static struct {
|
|||||||
{ RS(ID_TGID), 0, NULL, QS(s_int), 0 }, // oldflags: free w/ simple_nextpid
|
{ RS(ID_TGID), 0, NULL, QS(s_int), 0 }, // oldflags: free w/ simple_nextpid
|
||||||
{ RS(ID_TPGID), f_stat, NULL, QS(s_int), 0 },
|
{ RS(ID_TPGID), f_stat, NULL, QS(s_int), 0 },
|
||||||
{ RS(LXCNAME), f_lxc, NULL, QS(str), 0 }, // freefunc NULL w/ cached string
|
{ RS(LXCNAME), f_lxc, NULL, QS(str), 0 }, // freefunc NULL w/ cached string
|
||||||
{ RS(MEM_CODE), f_statm, NULL, QS(sl_int), 0 },
|
{ RS(MEM_CODE), f_statm, NULL, QS(ul_int), 0 },
|
||||||
{ RS(MEM_CODE_KIB), f_statm, NULL, QS(sl_int), 0 },
|
{ RS(MEM_CODE_PGS), f_statm, NULL, QS(ul_int), 0 },
|
||||||
{ RS(MEM_DATA), f_statm, NULL, QS(sl_int), 0 },
|
{ RS(MEM_DATA), f_statm, NULL, QS(ul_int), 0 },
|
||||||
{ RS(MEM_DATA_KIB), f_statm, NULL, QS(sl_int), 0 },
|
{ RS(MEM_DATA_PGS), f_statm, NULL, QS(ul_int), 0 },
|
||||||
{ RS(MEM_DT), f_statm, NULL, QS(sl_int), 0 },
|
{ RS(MEM_DT_PGS), f_statm, NULL, QS(ul_int), 0 }, // ( always 0 w/ since 2.6 )
|
||||||
{ RS(MEM_LRS), f_statm, NULL, QS(sl_int), 0 },
|
{ RS(MEM_LRS_PGS), f_statm, NULL, QS(ul_int), 0 },
|
||||||
{ RS(MEM_RES), f_statm, NULL, QS(sl_int), 0 },
|
{ RS(MEM_RES), f_statm, NULL, QS(ul_int), 0 },
|
||||||
{ RS(MEM_RES_KIB), f_statm, NULL, QS(sl_int), 0 },
|
{ RS(MEM_RES_PGS), f_statm, NULL, QS(ul_int), 0 },
|
||||||
{ RS(MEM_SHR), f_statm, NULL, QS(sl_int), 0 },
|
{ RS(MEM_SHR), f_statm, NULL, QS(ul_int), 0 },
|
||||||
{ RS(MEM_SHR_KIB), f_statm, NULL, QS(sl_int), 0 },
|
{ RS(MEM_SHR_PGS), f_statm, NULL, QS(ul_int), 0 },
|
||||||
{ RS(MEM_VIRT), f_statm, NULL, QS(sl_int), 0 },
|
{ RS(MEM_VIRT), f_statm, NULL, QS(ul_int), 0 },
|
||||||
{ RS(MEM_VIRT_KIB), f_statm, NULL, QS(sl_int), 0 },
|
{ RS(MEM_VIRT_PGS), f_statm, NULL, QS(ul_int), 0 },
|
||||||
{ RS(NICE), f_stat, NULL, QS(sl_int), 0 },
|
{ RS(NICE), f_stat, NULL, QS(s_int), 0 },
|
||||||
{ RS(NLWP), f_either, NULL, QS(s_int), 0 },
|
{ RS(NLWP), f_either, NULL, QS(s_int), 0 },
|
||||||
{ RS(NS_IPC), f_ns, NULL, QS(ul_int), 0 },
|
{ RS(NS_IPC), f_ns, NULL, QS(ul_int), 0 },
|
||||||
{ RS(NS_MNT), f_ns, NULL, QS(ul_int), 0 },
|
{ RS(NS_MNT), f_ns, NULL, QS(ul_int), 0 },
|
||||||
@ -453,10 +455,10 @@ static struct {
|
|||||||
{ RS(OOM_SCORE), f_oom, NULL, QS(s_int), 0 },
|
{ RS(OOM_SCORE), f_oom, NULL, QS(s_int), 0 },
|
||||||
{ RS(PRIORITY), f_stat, NULL, QS(s_int), 0 },
|
{ RS(PRIORITY), f_stat, NULL, QS(s_int), 0 },
|
||||||
{ RS(PROCESSOR), f_stat, NULL, QS(u_int), 0 },
|
{ RS(PROCESSOR), f_stat, NULL, QS(u_int), 0 },
|
||||||
{ RS(RSS), f_stat, NULL, QS(sl_int), 0 },
|
{ RS(RSS), f_stat, NULL, QS(ul_int), 0 },
|
||||||
{ RS(RSS_RLIM), f_stat, NULL, QS(ul_int), 0 },
|
{ RS(RSS_RLIM), f_stat, NULL, QS(ul_int), 0 },
|
||||||
{ RS(RTPRIO), f_stat, NULL, QS(ul_int), 0 },
|
{ RS(RTPRIO), f_stat, NULL, QS(s_int), 0 },
|
||||||
{ RS(SCHED_CLASS), f_stat, NULL, QS(ul_int), 0 },
|
{ RS(SCHED_CLASS), f_stat, NULL, QS(s_int), 0 },
|
||||||
{ RS(SD_MACH), f_systemd, FF(str), QS(str), 0 },
|
{ RS(SD_MACH), f_systemd, FF(str), QS(str), 0 },
|
||||||
{ RS(SD_OUID), f_systemd, FF(str), QS(str), 0 },
|
{ RS(SD_OUID), f_systemd, FF(str), QS(str), 0 },
|
||||||
{ RS(SD_SEAT), f_systemd, FF(str), QS(str), 0 },
|
{ RS(SD_SEAT), f_systemd, FF(str), QS(str), 0 },
|
||||||
@ -474,7 +476,10 @@ static struct {
|
|||||||
{ RS(SUPGROUPS), x_supgrp, FF(str), QS(str), 0 },
|
{ RS(SUPGROUPS), x_supgrp, FF(str), QS(str), 0 },
|
||||||
{ RS(TICS_ALL), f_stat, NULL, QS(ull_int), 0 },
|
{ RS(TICS_ALL), f_stat, NULL, QS(ull_int), 0 },
|
||||||
{ RS(TICS_ALL_C), f_stat, NULL, QS(ull_int), 0 },
|
{ RS(TICS_ALL_C), f_stat, NULL, QS(ull_int), 0 },
|
||||||
{ RS(TICS_DELTA), f_stat, NULL, QS(sl_int), +1 },
|
{ RS(TICS_ALL_DELTA), f_stat, NULL, QS(s_int), +1 },
|
||||||
|
{ RS(TICS_BLKIO), f_stat, NULL, QS(ull_int), 0 },
|
||||||
|
{ RS(TICS_GUEST), f_stat, NULL, QS(ull_int), 0 },
|
||||||
|
{ RS(TICS_GUEST_C), f_stat, NULL, QS(ull_int), 0 },
|
||||||
{ RS(TICS_SYSTEM), f_stat, NULL, QS(ull_int), 0 },
|
{ RS(TICS_SYSTEM), f_stat, NULL, QS(ull_int), 0 },
|
||||||
{ RS(TICS_SYSTEM_C), f_stat, NULL, QS(ull_int), 0 },
|
{ RS(TICS_SYSTEM_C), f_stat, NULL, QS(ull_int), 0 },
|
||||||
{ RS(TICS_USER), f_stat, NULL, QS(ull_int), 0 },
|
{ RS(TICS_USER), f_stat, NULL, QS(ull_int), 0 },
|
||||||
@ -485,20 +490,20 @@ static struct {
|
|||||||
{ RS(TTY), f_stat, NULL, QS(s_int), 0 },
|
{ RS(TTY), f_stat, NULL, QS(s_int), 0 },
|
||||||
{ RS(TTY_NAME), f_stat, FF(str), QS(strvers), 0 },
|
{ RS(TTY_NAME), f_stat, FF(str), QS(strvers), 0 },
|
||||||
{ RS(TTY_NUMBER), f_stat, FF(str), QS(strvers), 0 },
|
{ RS(TTY_NUMBER), f_stat, FF(str), QS(strvers), 0 },
|
||||||
{ RS(VM_DATA), f_status, NULL, QS(sl_int), 0 },
|
{ RS(VM_DATA), f_status, NULL, QS(ul_int), 0 },
|
||||||
{ RS(VM_EXE), f_status, NULL, QS(sl_int), 0 },
|
{ RS(VM_EXE), f_status, NULL, QS(ul_int), 0 },
|
||||||
{ RS(VM_LIB), f_status, NULL, QS(sl_int), 0 },
|
{ RS(VM_LIB), f_status, NULL, QS(ul_int), 0 },
|
||||||
{ RS(VM_RSS), f_status, NULL, QS(sl_int), 0 },
|
{ RS(VM_RSS), f_status, NULL, QS(ul_int), 0 },
|
||||||
{ RS(VM_RSS_ANON), f_status, NULL, QS(sl_int), 0 },
|
{ RS(VM_RSS_ANON), f_status, NULL, QS(ul_int), 0 },
|
||||||
{ RS(VM_RSS_FILE), f_status, NULL, QS(sl_int), 0 },
|
{ RS(VM_RSS_FILE), f_status, NULL, QS(ul_int), 0 },
|
||||||
{ RS(VM_RSS_LOCKED), f_status, NULL, QS(sl_int), 0 },
|
{ RS(VM_RSS_LOCKED), f_status, NULL, QS(ul_int), 0 },
|
||||||
{ RS(VM_RSS_SHARED), f_status, NULL, QS(sl_int), 0 },
|
{ RS(VM_RSS_SHARED), f_status, NULL, QS(ul_int), 0 },
|
||||||
{ RS(VM_SIZE), f_status, NULL, QS(sl_int), 0 },
|
{ RS(VM_SIZE), f_status, NULL, QS(ul_int), 0 },
|
||||||
{ RS(VM_STACK), f_status, NULL, QS(sl_int), 0 },
|
{ RS(VM_STACK), f_status, NULL, QS(ul_int), 0 },
|
||||||
{ RS(VM_SWAP), f_status, NULL, QS(sl_int), 0 },
|
{ RS(VM_SWAP), f_status, NULL, QS(ul_int), 0 },
|
||||||
{ RS(VM_USED), f_status, NULL, QS(sl_int), 0 },
|
{ RS(VM_USED), f_status, NULL, QS(ul_int), 0 },
|
||||||
{ RS(VSIZE_PGS), f_stat, NULL, QS(ul_int), 0 },
|
{ RS(VSIZE_PGS), f_stat, NULL, QS(ul_int), 0 },
|
||||||
{ RS(WCHAN_ADDR), f_stat, NULL, QS(ul_int), 0 },
|
{ RS(WCHAN_ADDR), 0, NULL, QS(ul_int), 0 }, // oldflags: was f_stat, but linux obsoleted
|
||||||
{ RS(WCHAN_NAME), 0, FF(str), QS(str), 0 }, // oldflags: tid already free
|
{ RS(WCHAN_NAME), 0, FF(str), QS(str), 0 }, // oldflags: tid already free
|
||||||
|
|
||||||
// dummy entry corresponding to PIDS_logical_end ...
|
// dummy entry corresponding to PIDS_logical_end ...
|
||||||
@ -549,7 +554,7 @@ typedef unsigned long long TIC_t;
|
|||||||
|
|
||||||
typedef struct HST_t {
|
typedef struct HST_t {
|
||||||
TIC_t tics; // last frame's tics count
|
TIC_t tics; // last frame's tics count
|
||||||
long maj, min; // last frame's maj/min_flt counts
|
unsigned long maj, min; // last frame's maj/min_flt counts
|
||||||
int pid; // record 'key'
|
int pid; // record 'key'
|
||||||
int lnk; // next on hash chain
|
int lnk; // next on hash chain
|
||||||
} HST_t;
|
} HST_t;
|
||||||
@ -626,15 +631,14 @@ static int make_hist (
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
Hr(PHist_new[nSLOT].pid) = p->tid;
|
Hr(PHist_new[nSLOT].pid) = p->tid;
|
||||||
Hr(PHist_new[nSLOT].tics) = tics = (p->utime + p->stime);
|
|
||||||
Hr(PHist_new[nSLOT].maj) = p->maj_flt;
|
Hr(PHist_new[nSLOT].maj) = p->maj_flt;
|
||||||
Hr(PHist_new[nSLOT].min) = p->min_flt;
|
Hr(PHist_new[nSLOT].min) = p->min_flt;
|
||||||
|
Hr(PHist_new[nSLOT].tics) = tics = (p->utime + p->stime);
|
||||||
|
|
||||||
histput(info, nSLOT);
|
histput(info, nSLOT);
|
||||||
|
|
||||||
if ((h = histget(info, p->tid))) {
|
if ((h = histget(info, p->tid))) {
|
||||||
tics -= h->tics;
|
p->pcpu = tics - h->tics;
|
||||||
p->pcpu = tics;
|
|
||||||
p->maj_delta = p->maj_flt - h->maj;
|
p->maj_delta = p->maj_flt - h->maj;
|
||||||
p->min_delta = p->min_flt - h->min;
|
p->min_delta = p->min_flt - h->min;
|
||||||
}
|
}
|
||||||
@ -939,7 +943,6 @@ static inline int oldproc_open (
|
|||||||
unsigned flags,
|
unsigned flags,
|
||||||
...)
|
...)
|
||||||
{
|
{
|
||||||
|
|
||||||
va_list vl;
|
va_list vl;
|
||||||
int *ids;
|
int *ids;
|
||||||
int num = 0;
|
int num = 0;
|
||||||
|
76
proc/pids.h
76
proc/pids.h
@ -35,7 +35,7 @@ enum pids_item {
|
|||||||
PIDS_ADDR_KSTK_ESP, // ul_int
|
PIDS_ADDR_KSTK_ESP, // ul_int
|
||||||
PIDS_ADDR_START_CODE, // ul_int
|
PIDS_ADDR_START_CODE, // ul_int
|
||||||
PIDS_ADDR_START_STACK, // ul_int
|
PIDS_ADDR_START_STACK, // ul_int
|
||||||
PIDS_ALARM, // sl_int
|
PIDS_ALARM, // ul_int
|
||||||
PIDS_CGNAME, // str
|
PIDS_CGNAME, // str
|
||||||
PIDS_CGROUP, // str
|
PIDS_CGROUP, // str
|
||||||
PIDS_CGROUP_V, // strv
|
PIDS_CGROUP_V, // strv
|
||||||
@ -46,12 +46,12 @@ enum pids_item {
|
|||||||
PIDS_ENVIRON_V, // strv
|
PIDS_ENVIRON_V, // strv
|
||||||
PIDS_EXIT_SIGNAL, // s_int
|
PIDS_EXIT_SIGNAL, // s_int
|
||||||
PIDS_FLAGS, // ul_int
|
PIDS_FLAGS, // ul_int
|
||||||
PIDS_FLT_MAJ, // sl_int
|
PIDS_FLT_MAJ, // ul_int
|
||||||
PIDS_FLT_MAJ_C, // sl_int
|
PIDS_FLT_MAJ_C, // ul_int
|
||||||
PIDS_FLT_MAJ_DELTA, // sl_int
|
PIDS_FLT_MAJ_DELTA, // s_int
|
||||||
PIDS_FLT_MIN, // sl_int
|
PIDS_FLT_MIN, // ul_int
|
||||||
PIDS_FLT_MIN_C, // sl_int
|
PIDS_FLT_MIN_C, // ul_int
|
||||||
PIDS_FLT_MIN_DELTA, // sl_int
|
PIDS_FLT_MIN_DELTA, // s_int
|
||||||
PIDS_ID_EGID, // u_int
|
PIDS_ID_EGID, // u_int
|
||||||
PIDS_ID_EGROUP, // str
|
PIDS_ID_EGROUP, // str
|
||||||
PIDS_ID_EUID, // u_int
|
PIDS_ID_EUID, // u_int
|
||||||
@ -75,19 +75,19 @@ enum pids_item {
|
|||||||
PIDS_ID_TGID, // s_int
|
PIDS_ID_TGID, // s_int
|
||||||
PIDS_ID_TPGID, // s_int
|
PIDS_ID_TPGID, // s_int
|
||||||
PIDS_LXCNAME, // str
|
PIDS_LXCNAME, // str
|
||||||
PIDS_MEM_CODE, // sl_int
|
PIDS_MEM_CODE, // ul_int
|
||||||
PIDS_MEM_CODE_KIB, // sl_int
|
PIDS_MEM_CODE_PGS, // ul_int
|
||||||
PIDS_MEM_DATA, // sl_int
|
PIDS_MEM_DATA, // ul_int
|
||||||
PIDS_MEM_DATA_KIB, // sl_int
|
PIDS_MEM_DATA_PGS, // ul_int
|
||||||
PIDS_MEM_DT, // sl_int
|
PIDS_MEM_DT_PGS, // ul_int
|
||||||
PIDS_MEM_LRS, // sl_int
|
PIDS_MEM_LRS_PGS, // ul_int
|
||||||
PIDS_MEM_RES, // sl_int
|
PIDS_MEM_RES, // ul_int
|
||||||
PIDS_MEM_RES_KIB, // sl_int
|
PIDS_MEM_RES_PGS, // ul_int
|
||||||
PIDS_MEM_SHR, // sl_int
|
PIDS_MEM_SHR, // ul_int
|
||||||
PIDS_MEM_SHR_KIB, // sl_int
|
PIDS_MEM_SHR_PGS, // ul_int
|
||||||
PIDS_MEM_VIRT, // sl_int
|
PIDS_MEM_VIRT, // ul_int
|
||||||
PIDS_MEM_VIRT_KIB, // sl_int
|
PIDS_MEM_VIRT_PGS, // ul_int
|
||||||
PIDS_NICE, // sl_int
|
PIDS_NICE, // s_int
|
||||||
PIDS_NLWP, // s_int
|
PIDS_NLWP, // s_int
|
||||||
PIDS_NS_IPC, // ul_int
|
PIDS_NS_IPC, // ul_int
|
||||||
PIDS_NS_MNT, // ul_int
|
PIDS_NS_MNT, // ul_int
|
||||||
@ -99,10 +99,10 @@ enum pids_item {
|
|||||||
PIDS_OOM_SCORE, // s_int
|
PIDS_OOM_SCORE, // s_int
|
||||||
PIDS_PRIORITY, // s_int
|
PIDS_PRIORITY, // s_int
|
||||||
PIDS_PROCESSOR, // u_int
|
PIDS_PROCESSOR, // u_int
|
||||||
PIDS_RSS, // sl_int
|
PIDS_RSS, // ul_int
|
||||||
PIDS_RSS_RLIM, // ul_int
|
PIDS_RSS_RLIM, // ul_int
|
||||||
PIDS_RTPRIO, // ul_int
|
PIDS_RTPRIO, // s_int
|
||||||
PIDS_SCHED_CLASS, // ul_int
|
PIDS_SCHED_CLASS, // s_int
|
||||||
PIDS_SD_MACH, // str
|
PIDS_SD_MACH, // str
|
||||||
PIDS_SD_OUID, // str
|
PIDS_SD_OUID, // str
|
||||||
PIDS_SD_SEAT, // str
|
PIDS_SD_SEAT, // str
|
||||||
@ -120,7 +120,10 @@ enum pids_item {
|
|||||||
PIDS_SUPGROUPS, // str
|
PIDS_SUPGROUPS, // str
|
||||||
PIDS_TICS_ALL, // ull_int
|
PIDS_TICS_ALL, // ull_int
|
||||||
PIDS_TICS_ALL_C, // ull_int
|
PIDS_TICS_ALL_C, // ull_int
|
||||||
PIDS_TICS_DELTA, // sl_int
|
PIDS_TICS_ALL_DELTA, // s_int
|
||||||
|
PIDS_TICS_BLKIO, // ull_int
|
||||||
|
PIDS_TICS_GUEST, // ull_int
|
||||||
|
PIDS_TICS_GUEST_C, // ull_int
|
||||||
PIDS_TICS_SYSTEM, // ull_int
|
PIDS_TICS_SYSTEM, // ull_int
|
||||||
PIDS_TICS_SYSTEM_C, // ull_int
|
PIDS_TICS_SYSTEM_C, // ull_int
|
||||||
PIDS_TICS_USER, // ull_int
|
PIDS_TICS_USER, // ull_int
|
||||||
@ -131,18 +134,18 @@ enum pids_item {
|
|||||||
PIDS_TTY, // s_int
|
PIDS_TTY, // s_int
|
||||||
PIDS_TTY_NAME, // str
|
PIDS_TTY_NAME, // str
|
||||||
PIDS_TTY_NUMBER, // str
|
PIDS_TTY_NUMBER, // str
|
||||||
PIDS_VM_DATA, // sl_int
|
PIDS_VM_DATA, // ul_int
|
||||||
PIDS_VM_EXE, // sl_int
|
PIDS_VM_EXE, // ul_int
|
||||||
PIDS_VM_LIB, // sl_int
|
PIDS_VM_LIB, // ul_int
|
||||||
PIDS_VM_RSS, // sl_int
|
PIDS_VM_RSS, // ul_int
|
||||||
PIDS_VM_RSS_ANON, // sl_int
|
PIDS_VM_RSS_ANON, // ul_int
|
||||||
PIDS_VM_RSS_FILE, // sl_int
|
PIDS_VM_RSS_FILE, // ul_int
|
||||||
PIDS_VM_RSS_LOCKED, // sl_int
|
PIDS_VM_RSS_LOCKED, // ul_int
|
||||||
PIDS_VM_RSS_SHARED, // sl_int
|
PIDS_VM_RSS_SHARED, // ul_int
|
||||||
PIDS_VM_SIZE, // sl_int
|
PIDS_VM_SIZE, // ul_int
|
||||||
PIDS_VM_STACK, // sl_int
|
PIDS_VM_STACK, // ul_int
|
||||||
PIDS_VM_SWAP, // sl_int
|
PIDS_VM_SWAP, // ul_int
|
||||||
PIDS_VM_USED, // sl_int
|
PIDS_VM_USED, // ul_int
|
||||||
PIDS_VSIZE_PGS, // ul_int
|
PIDS_VSIZE_PGS, // ul_int
|
||||||
PIDS_WCHAN_ADDR, // ul_int
|
PIDS_WCHAN_ADDR, // ul_int
|
||||||
PIDS_WCHAN_NAME // str
|
PIDS_WCHAN_NAME // str
|
||||||
@ -170,7 +173,6 @@ struct pids_result {
|
|||||||
signed char s_ch;
|
signed char s_ch;
|
||||||
signed int s_int;
|
signed int s_int;
|
||||||
unsigned int u_int;
|
unsigned int u_int;
|
||||||
signed long sl_int;
|
|
||||||
unsigned long ul_int;
|
unsigned long ul_int;
|
||||||
unsigned long long ull_int;
|
unsigned long long ull_int;
|
||||||
char *str;
|
char *str;
|
||||||
|
@ -350,37 +350,37 @@ ENTER(0x220);
|
|||||||
P->fgid = strtol(S,&S,10);
|
P->fgid = strtol(S,&S,10);
|
||||||
continue;
|
continue;
|
||||||
case_VmData:
|
case_VmData:
|
||||||
P->vm_data = strtol(S,&S,10);
|
P->vm_data = (unsigned long)strtol(S,&S,10);
|
||||||
continue;
|
continue;
|
||||||
case_VmExe:
|
case_VmExe:
|
||||||
P->vm_exe = strtol(S,&S,10);
|
P->vm_exe = (unsigned long)strtol(S,&S,10);
|
||||||
continue;
|
continue;
|
||||||
case_VmLck:
|
case_VmLck:
|
||||||
P->vm_lock = strtol(S,&S,10);
|
P->vm_lock = (unsigned long)strtol(S,&S,10);
|
||||||
continue;
|
continue;
|
||||||
case_VmLib:
|
case_VmLib:
|
||||||
P->vm_lib = strtol(S,&S,10);
|
P->vm_lib = (unsigned long)strtol(S,&S,10);
|
||||||
continue;
|
continue;
|
||||||
case_VmRSS:
|
case_VmRSS:
|
||||||
P->vm_rss = strtol(S,&S,10);
|
P->vm_rss = (unsigned long)strtol(S,&S,10);
|
||||||
continue;
|
continue;
|
||||||
case_RssAnon: // subset of VmRSS, linux-4.5
|
case_RssAnon: // subset of VmRSS, linux-4.5
|
||||||
P->vm_rss_anon = strtol(S,&S,10);
|
P->vm_rss_anon = (unsigned long)strtol(S,&S,10);
|
||||||
continue;
|
continue;
|
||||||
case_RssFile: // subset of VmRSS, linux-4.5
|
case_RssFile: // subset of VmRSS, linux-4.5
|
||||||
P->vm_rss_file = strtol(S,&S,10);
|
P->vm_rss_file = (unsigned long)strtol(S,&S,10);
|
||||||
continue;
|
continue;
|
||||||
case_RssShmem: // subset of VmRSS, linux-4.5
|
case_RssShmem: // subset of VmRSS, linux-4.5
|
||||||
P->vm_rss_shared = strtol(S,&S,10);
|
P->vm_rss_shared = (unsigned long)strtol(S,&S,10);
|
||||||
continue;
|
continue;
|
||||||
case_VmSize:
|
case_VmSize:
|
||||||
P->vm_size = strtol(S,&S,10);
|
P->vm_size = (unsigned long)strtol(S,&S,10);
|
||||||
continue;
|
continue;
|
||||||
case_VmStk:
|
case_VmStk:
|
||||||
P->vm_stack = strtol(S,&S,10);
|
P->vm_stack = (unsigned long)strtol(S,&S,10);
|
||||||
continue;
|
continue;
|
||||||
case_VmSwap: // Linux 2.6.34
|
case_VmSwap: // Linux 2.6.34
|
||||||
P->vm_swap = strtol(S,&S,10);
|
P->vm_swap = (unsigned long)strtol(S,&S,10);
|
||||||
continue;
|
continue;
|
||||||
case_Groups:
|
case_Groups:
|
||||||
{ char *nl = strchr(S, '\n');
|
{ char *nl = strchr(S, '\n');
|
||||||
@ -551,21 +551,22 @@ ENTER(0x160);
|
|||||||
S = tmp + 2; // skip ") "
|
S = tmp + 2; // skip ") "
|
||||||
|
|
||||||
num = sscanf(S,
|
num = sscanf(S,
|
||||||
"%c "
|
"%c " // state
|
||||||
"%d %d %d %d %d "
|
"%d %d %d %d %d " // ppid, pgrp, sid, tty_nr, tty_pgrp
|
||||||
"%lu %ld %ld %ld %ld "
|
"%lu %lu %lu %lu %lu " // flags, min_flt, cmin_flt, maj_flt, cmaj_flt
|
||||||
"%llu %llu %llu %llu " /* utime stime cutime cstime */
|
"%llu %llu %llu %llu " // utime, stime, cutime, cstime
|
||||||
"%ld %ld "
|
"%d %d " // priority, nice
|
||||||
"%d "
|
"%d " // num_threads
|
||||||
"%ld "
|
"%lu " // 'alarm' == it_real_value (obsolete, always 0)
|
||||||
"%llu " /* start_time */
|
"%llu " // start_time
|
||||||
"%lu "
|
"%lu " // vsize
|
||||||
"%ld "
|
"%lu " // rss
|
||||||
"%lu %lu %lu %lu %lu %lu "
|
"%lu %lu %lu %lu %lu %lu " // rsslim, start_code, end_code, start_stack, esp, eip
|
||||||
"%*s %*s %*s %*s " /* discard, no RT signals & Linux 2.1 used hex */
|
"%*s %*s %*s %*s " // pending, blocked, sigign, sigcatch <=== DISCARDED
|
||||||
"%lu %*u %*u "
|
"%lu %*u %*u " // 0 (former wchan), 0, 0 <=== Placeholders only
|
||||||
"%d %d "
|
"%d %d " // exit_signal, task_cpu
|
||||||
"%lu %lu",
|
"%d %d " // rt_priority, policy (sched)
|
||||||
|
"%llu %llu %llu", // blkio_ticks, gtime, cgtime
|
||||||
&P->state,
|
&P->state,
|
||||||
&P->ppid, &P->pgrp, &P->session, &P->tty, &P->tpgid,
|
&P->ppid, &P->pgrp, &P->session, &P->tty, &P->tpgid,
|
||||||
&P->flags, &P->min_flt, &P->cmin_flt, &P->maj_flt, &P->cmaj_flt,
|
&P->flags, &P->min_flt, &P->cmin_flt, &P->maj_flt, &P->cmaj_flt,
|
||||||
@ -582,7 +583,8 @@ ENTER(0x160);
|
|||||||
/* -- Linux 2.0.35 ends here -- */
|
/* -- Linux 2.0.35 ends here -- */
|
||||||
&P->exit_signal, &P->processor, /* 2.2.1 ends with "exit_signal" */
|
&P->exit_signal, &P->processor, /* 2.2.1 ends with "exit_signal" */
|
||||||
/* -- Linux 2.2.8 to 2.5.17 end here -- */
|
/* -- Linux 2.2.8 to 2.5.17 end here -- */
|
||||||
&P->rtprio, &P->sched /* both added to 2.5.18 */
|
&P->rtprio, &P->sched, /* both added to 2.5.18 */
|
||||||
|
&P->blkio_tics, &P->gtime, &P->cgtime
|
||||||
);
|
);
|
||||||
|
|
||||||
if(!P->nlwp){
|
if(!P->nlwp){
|
||||||
@ -596,7 +598,7 @@ LEAVE(0x160);
|
|||||||
|
|
||||||
static void statm2proc(const char* s, proc_t *restrict P) {
|
static void statm2proc(const char* s, proc_t *restrict P) {
|
||||||
int num;
|
int num;
|
||||||
num = sscanf(s, "%ld %ld %ld %ld %ld %ld %ld",
|
num = sscanf(s, "%lu %lu %lu %lu %lu %lu %lu",
|
||||||
&P->size, &P->resident, &P->share,
|
&P->size, &P->resident, &P->share,
|
||||||
&P->trs, &P->lrs, &P->drs, &P->dt);
|
&P->trs, &P->lrs, &P->drs, &P->dt);
|
||||||
/* fprintf(stderr, "statm2proc converted %d fields.\n",num); */
|
/* fprintf(stderr, "statm2proc converted %d fields.\n",num); */
|
||||||
|
@ -21,13 +21,6 @@
|
|||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
|
|
||||||
// ld cutime, cstime, priority, nice, timeout, alarm, rss,
|
|
||||||
// c state,
|
|
||||||
// d ppid, pgrp, session, tty, tpgid,
|
|
||||||
// s signal, blocked, sigignore, sigcatch,
|
|
||||||
// lu flags, min_flt, cmin_flt, maj_flt, cmaj_flt, utime, stime,
|
|
||||||
// lu rss_rlim, start_code, end_code, start_stack, kstk_esp, kstk_eip,
|
|
||||||
// lu start_time, vsize, wchan,
|
|
||||||
|
|
||||||
// This is to help document a transition from pid to tgid/tid caused
|
// This is to help document a transition from pid to tgid/tid caused
|
||||||
// by the introduction of thread support. It is used in cases where
|
// by the introduction of thread support. It is used in cases where
|
||||||
@ -44,11 +37,6 @@ typedef struct proc_t {
|
|||||||
int
|
int
|
||||||
tid, // (special) task id, the POSIX thread ID (see also: tgid)
|
tid, // (special) task id, the POSIX thread ID (see also: tgid)
|
||||||
ppid; // stat,status pid of parent process
|
ppid; // stat,status pid of parent process
|
||||||
long // next 2 fields are NOT filled in by readproc
|
|
||||||
maj_delta, // stat (special) major page faults since last update
|
|
||||||
min_delta; // stat (special) minor page faults since last update
|
|
||||||
unsigned
|
|
||||||
pcpu; // stat (special) %CPU usage (is not filled in by readproc!!!)
|
|
||||||
char
|
char
|
||||||
state, // stat,status single-char code for process state (S=sleeping)
|
state, // stat,status single-char code for process state (S=sleeping)
|
||||||
#ifdef FALSE_THREADS
|
#ifdef FALSE_THREADS
|
||||||
@ -65,7 +53,14 @@ typedef struct proc_t {
|
|||||||
// and so on...
|
// and so on...
|
||||||
cutime, // stat cumulative utime of process and reaped children
|
cutime, // stat cumulative utime of process and reaped children
|
||||||
cstime, // stat cumulative stime of process and reaped children
|
cstime, // stat cumulative stime of process and reaped children
|
||||||
start_time; // stat start time of process -- seconds since 1-1-70
|
start_time, // stat start time of process -- seconds since 1-1-70
|
||||||
|
blkio_tics, // stat time spent waiting for block IO
|
||||||
|
gtime, // stat guest time of the task in jiffies
|
||||||
|
cgtime; // stat guest time of the task children in jiffies
|
||||||
|
int // next 3 fields are NOT filled in by readproc
|
||||||
|
pcpu, // stat (special) elapsed tics for %CPU usage calculation
|
||||||
|
maj_delta, // stat (special) major page faults since last update
|
||||||
|
min_delta; // stat (special) minor page faults since last update
|
||||||
#ifdef SIGNAL_STRING
|
#ifdef SIGNAL_STRING
|
||||||
char
|
char
|
||||||
// Linux 2.1.7x and up have 64 signals. Allow 64, plus '\0' and padding.
|
// Linux 2.1.7x and up have 64 signals. Allow 64, plus '\0' and padding.
|
||||||
@ -89,12 +84,13 @@ typedef struct proc_t {
|
|||||||
start_stack, // stat address of the bottom of stack for the process
|
start_stack, // stat address of the bottom of stack for the process
|
||||||
kstk_esp, // stat kernel stack pointer
|
kstk_esp, // stat kernel stack pointer
|
||||||
kstk_eip, // stat kernel instruction pointer
|
kstk_eip, // stat kernel instruction pointer
|
||||||
wchan; // stat (special) address of kernel wait channel proc is sleeping in
|
wchan, // stat (special) address of kernel wait channel proc is sleeping in
|
||||||
long
|
|
||||||
priority, // stat kernel scheduling priority
|
|
||||||
nice, // stat standard unix nice level of process
|
|
||||||
rss, // stat identical to 'resident'
|
rss, // stat identical to 'resident'
|
||||||
alarm, // stat ?
|
alarm; // stat ?
|
||||||
|
int
|
||||||
|
priority, // stat kernel scheduling priority
|
||||||
|
nice; // stat standard unix nice level of process
|
||||||
|
unsigned long
|
||||||
// the next 7 members come from /proc/#/statm
|
// the next 7 members come from /proc/#/statm
|
||||||
size, // statm total virtual memory (as # pages)
|
size, // statm total virtual memory (as # pages)
|
||||||
resident, // statm resident non-swapped memory (as # pages)
|
resident, // statm resident non-swapped memory (as # pages)
|
||||||
@ -103,7 +99,7 @@ typedef struct proc_t {
|
|||||||
lrs, // statm library resident set (always 0 w/ 2.6)
|
lrs, // statm library resident set (always 0 w/ 2.6)
|
||||||
drs, // statm data+stack resident set (as # pages)
|
drs, // statm data+stack resident set (as # pages)
|
||||||
dt; // statm dirty pages (always 0 w/ 2.6)
|
dt; // statm dirty pages (always 0 w/ 2.6)
|
||||||
long
|
unsigned long
|
||||||
vm_size, // status equals 'size' (as kb)
|
vm_size, // status equals 'size' (as kb)
|
||||||
vm_lock, // status locked pages (as kb)
|
vm_lock, // status locked pages (as kb)
|
||||||
vm_rss, // status equals 'rss' and/or 'resident' (as kb)
|
vm_rss, // status equals 'rss' and/or 'resident' (as kb)
|
||||||
@ -115,8 +111,6 @@ typedef struct proc_t {
|
|||||||
vm_swap, // status based on linux-2.6.34 "swap ents" (as kb)
|
vm_swap, // status based on linux-2.6.34 "swap ents" (as kb)
|
||||||
vm_exe, // status equals 'trs' (as kb)
|
vm_exe, // status equals 'trs' (as kb)
|
||||||
vm_lib, // status total, not just used, library pages (as kb)
|
vm_lib, // status total, not just used, library pages (as kb)
|
||||||
rtprio, // stat real-time priority
|
|
||||||
sched, // stat scheduling class
|
|
||||||
vsize, // stat number of pages of virtual memory ...
|
vsize, // stat number of pages of virtual memory ...
|
||||||
rss_rlim, // stat resident set size limit?
|
rss_rlim, // stat resident set size limit?
|
||||||
flags, // stat kernel flags for the process
|
flags, // stat kernel flags for the process
|
||||||
@ -145,6 +139,8 @@ typedef struct proc_t {
|
|||||||
*fgroup, // status filesystem group name
|
*fgroup, // status filesystem group name
|
||||||
*cmd; // stat,status basename of executable file in call to exec(2)
|
*cmd; // stat,status basename of executable file in call to exec(2)
|
||||||
int
|
int
|
||||||
|
rtprio, // stat real-time priority
|
||||||
|
sched, // stat scheduling class
|
||||||
pgrp, // stat process group id
|
pgrp, // stat process group id
|
||||||
session, // stat session id
|
session, // stat session id
|
||||||
nlwp, // stat,status number of threads, or 0 if no clue
|
nlwp, // stat,status number of threads, or 0 if no clue
|
||||||
|
Loading…
Reference in New Issue
Block a user