library version v3.3.0: proc_t data is incorrect, after call readproc().
My code:
#include "proc/readproc.h"
#include <errno.h>
static pid_t ld_proc_search(const char *procname)
{
PROCTAB *proc_list;
proc_t proc_info;
proc_list = openproc(PROC_FILLCOM | PROC_FILLSTAT | PROC_FILLSTATUS);
if (!proc_list) {
printf("openproc() failed: %s", strerror(errno));
return -1;
}
memset(&proc_info, 0, sizeof(proc_info));
while (readproc(proc_list, &proc_info))
printf("proc_info.tid: %d, %d, %s, %s, %s\n", proc_info.tid, proc_info.ppid, proc_info.cmd, proc_info.ruser, proc_info.suser);
closeproc(proc_list);
return 0;
}
Only "tid" and "ppid" value are correct.
Next, i debugging with gdb. information:
(gdb) p proc_info
$1 = {tid = 1, ppid = 0, maj_delta = 356482285568, min_delta = 3, pcpu = 126, state = 0 '\000', pad_1 = 0 '\000', pad_2 = 0 '\000', pad_3 = 0 '\000', utime = 291, stime = 645, cutime = 3,
cstime = 3472328296227680304, start_time = 3472328296227680304, signal = "\000\000", '0' <repeats 16 times>, blocked = "\000\000", '0' <repeats 12 times>, "1000",
sigignore = "\000\000\060\060\060\060\060\060\060\061a0016623", sigcatch = "\000\000", '0' <repeats 16 times>, _sigpnd = "\000\000\000\000\000\000\000\000\000PݮOV\000\000\324t",
start_code = 140731225571232, end_code = 140731225570312, start_stack = 140269558810243, kstk_esp = 18446744071580636521, kstk_eip = 20, wchan = 0, priority = 393, nice = 0, rss = 0, alarm = 0,
size = 0, resident = 0, share = 0, trs = 0, lrs = 0, drs = 19356, dt = 0, vm_size = 1572, vm_lock = 320, vm_rss = 84, vm_rss_anon = 0, vm_rss_file = 140, vm_rss_shared = 2356, vm_data = 0,
vm_stack = 0, vm_swap = 19820544, vm_exe = 18446744073709551615, vm_lib = 4202752, rtprio = 3468, sched = 9, vsize = 796135, rss_rlim = 679, flags = 0, min_flt = 6361392, maj_flt = 0,
cmin_flt = 6361344, cmaj_flt = 0, environ = 0x0, cmdline = 0x0, cgroup = 0x0, cgname = 0x0, supgid = 0x0, supgrp = 0x0, euser = '\000' <repeats 32 times>, ruser = '\000' <repeats 32 times>,
suser = '\000' <repeats 32 times>, fuser = '\000' <repeats 13 times>, "init", '\000' <repeats 15 times>,
rgroup = '\000' <repeats 12 times>, "\001\000\000\000\001\000\000\000\001\000\000\000\001\000\000\000\000\000\000\000", egroup = '\000' <repeats 31 times>"\377, \377",
sgroup = "\377\377", '\000' <repeats 30 times>, fgroup = '\000' <repeats 32 times>, cmd = '\000' <repeats 63 times>, ring = 0x0, next = 0x0, pgrp = 0, session = 0, nlwp = 0, tgid = 0, tty = 0,
euid = 0, egid = 0, ruid = 0, rgid = 0, suid = 0, sgid = 0, fuid = 0, fgid = 0, tpgid = 0, exit_signal = 0, processor = 0, oom_score = 0, oom_adj = 0, ns = {0, 0, 0, 0, 0, 0}, sd_mach = 0x0,
sd_ouid = 0x0, sd_seat = 0x0, sd_sess = 0x0, sd_slice = 0x0, sd_unit = 0x0, sd_uunit = 0x0, lxcname = 0x0}
(gdb)
Edited by Yu Liu