BSD-Process
view release on metacpan or search on metacpan
#define TIME_FRAC(t) ((double)(t).tv_sec + (double)(t).tv_usec/1000000)
#define P_FLAG(f) ((kp->ki_flag & f) ? 1 : 0)
#define KI_FLAG(f) ((kp->ki_kiflag & f) ? 1 : 0)
#if __FreeBSD_version < 500000
#define NO_FREEBSD_4x(a) (-1)
#define NO_FREEBSD_4x_pv(a) ("")
#else
#define NO_FREEBSD_4x(a) (a)
#define NO_FREEBSD_4x_pv(a) (a)
#endif
#if __FreeBSD_version < 600000
#define NO_FREEBSD_5x(a) (-1)
#define NO_FREEBSD_5x_pv(a) ("")
#else
#define NO_FREEBSD_5x(a) (a)
#define NO_FREEBSD_5x_pv(a) (a)
#endif
static int proc_info_mib[4] = { -1, -1, -1, -1 };
struct kinfo_proc *_proc_request (kvm_t *kd, int request, int param, int *pnr) {
struct kinfo_proc *kip;
switch(request) {
case 2:
kip = kvm_getprocs(kd, KERN_PROC_PGRP, param, pnr);
break;
case 3:
kip = kvm_getprocs(kd, KERN_PROC_SESSION, param, pnr);
break;
case 5:
kip = kvm_getprocs(kd, KERN_PROC_UID, param, pnr);
break;
case 6:
kip = kvm_getprocs(kd, KERN_PROC_RUID, param, pnr);
break;
#if __FreeBSD_version >= 600000
case 10:
kip = kvm_getprocs(kd, KERN_PROC_RGID, param, pnr);
break;
case 11:
kip = kvm_getprocs(kd, KERN_PROC_GID, param, pnr);
break;
#endif
case 0:
default:
kip = kvm_getprocs(kd, KERN_PROC_ALL, 0, pnr);
break;
}
return(kip);
}
void store_uid (HV *h, const char *field, uid_t uid) {
struct passwd *pw;
size_t flen;
size_t len;
flen = strlen(field);
if (!(pw = getpwuid(uid))) {
/* shouldn't ever happen... */
hv_store(h, field, flen, newSViv(uid), 0);
}
else {
len = strlen(pw->pw_name);
hv_store(h, field, flen, newSVpvn(pw->pw_name,len), 0);
}
}
void store_gid (HV *h, const char *field, gid_t gid) {
struct group *gr;
size_t flen;
size_t len;
flen = strlen(field);
if (!(gr = getgrgid(gid))) {
/* shouldn't ever happen... */
hv_store(h, field, flen, newSViv(gid), 0);
}
else {
len = strlen(gr->gr_name);
hv_store(h, field, flen, newSVpvn(gr->gr_name,len), 0);
}
}
#if __FreeBSD_version < 500000
#define ACFLAG_FIELD kp_proc.p_acflag
#define COMM_FIELD kp_proc.p_comm
#define ESTCPU_FIELD kp_proc.p_estcpu
#define FLAG_FIELD kp_eproc.e_jobc
#define JOBC_FIELD kp_eproc.e_flag
#define LASTCPU_FIELD kp_proc.p_lastcpu
#define LOCK_FIELD kp_proc.p_lock
#define LOGIN_FIELD kp_eproc.e_login
#define NICE_FIELD kp_proc.p_nice
#define ONCPU_FIELD kp_proc.p_oncpu
#define PCTCPU_FIELD kp_proc.p_pctcpu
#define PGID_FIELD kp_eproc.e_pgid
#define PID_FIELD kp_proc.p_pid
#define PPID_FIELD kp_eproc.e_ppid
#define RQINDEX_FIELD kp_proc.p_rqindex
#define RSSIZE_FIELD kp_eproc.e_xrssize
#define RUNTIME_FIELD kp_proc.p_runtime
#define SLPTIME_FIELD kp_proc.p_slptime
#define SWRSS_FIELD kp_eproc.e_xswrss
#define SWTIME_FIELD kp_proc.p_swtime
#define TPGID_FIELD kp_eproc.e_tpgid
#define TSIZE_FIELD kp_eproc.e_xsize
#define WMESG_FIELD kp_eproc.e_wmesg
#define XSTAT_FIELD kp_proc.p_xstat
#else
#define ACFLAG_FIELD ki_acflag
#define COMM_FIELD ki_comm
#define ESTCPU_FIELD ki_estcpu
#define FLAG_FIELD ki_flag
#define JOBC_FIELD ki_jobc
#define LASTCPU_FIELD ki_lastcpu
#define LOCK_FIELD ki_lock
#define LOGIN_FIELD ki_login
( run in 2.585 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )