OpenBSD porting of sigar_proc_ functions
This commit is contained in:
parent
4ef57c1ae0
commit
3bd2bd2c6d
@ -101,7 +101,7 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SIGAR_FREEBSD5
|
#if defined(SIGAR_FREEBSD5)
|
||||||
|
|
||||||
#define KI_FD ki_fd
|
#define KI_FD ki_fd
|
||||||
#define KI_PID ki_pid
|
#define KI_PID ki_pid
|
||||||
@ -122,7 +122,7 @@
|
|||||||
#define KI_FLAG ki_flag
|
#define KI_FLAG ki_flag
|
||||||
#define KI_START ki_start
|
#define KI_START ki_start
|
||||||
|
|
||||||
#else
|
#elif defined(DARWIN) || defined(SIGAR_FREEBSD4) || defined(__OpenBSD__)
|
||||||
|
|
||||||
#define KI_FD kp_proc.p_fd
|
#define KI_FD kp_proc.p_fd
|
||||||
#define KI_PID kp_proc.p_pid
|
#define KI_PID kp_proc.p_pid
|
||||||
@ -770,7 +770,7 @@ static int proc_fdinfo_get(sigar_t *sigar, sigar_pid_t pid, int *num)
|
|||||||
int sigar_os_proc_list_get(sigar_t *sigar,
|
int sigar_os_proc_list_get(sigar_t *sigar,
|
||||||
sigar_proc_list_t *proclist)
|
sigar_proc_list_t *proclist)
|
||||||
{
|
{
|
||||||
#if defined(DARWIN) || defined(SIGAR_FREEBSD5)
|
#if defined(DARWIN) || defined(SIGAR_FREEBSD5) || defined(__OpenBSD__)
|
||||||
int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PROC, 0 };
|
int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PROC, 0 };
|
||||||
int i, num;
|
int i, num;
|
||||||
size_t len;
|
size_t len;
|
||||||
@ -827,7 +827,11 @@ int sigar_os_proc_list_get(sigar_t *sigar,
|
|||||||
|
|
||||||
static int sigar_get_pinfo(sigar_t *sigar, sigar_pid_t pid)
|
static int sigar_get_pinfo(sigar_t *sigar, sigar_pid_t pid)
|
||||||
{
|
{
|
||||||
int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, 0 };
|
#ifdef __OpenBSD__
|
||||||
|
int mib[] = { CTL_KERN, KERN_PROC2, KERN_PROC_PID, 0, sizeof(*sigar->pinfo), 1 };
|
||||||
|
#else
|
||||||
|
int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, 0 };
|
||||||
|
#endif
|
||||||
size_t len = sizeof(*sigar->pinfo);
|
size_t len = sizeof(*sigar->pinfo);
|
||||||
time_t timenow = time(NULL);
|
time_t timenow = time(NULL);
|
||||||
mib[3] = pid;
|
mib[3] = pid;
|
||||||
@ -855,7 +859,7 @@ static int sigar_get_pinfo(sigar_t *sigar, sigar_pid_t pid)
|
|||||||
int sigar_proc_mem_get(sigar_t *sigar, sigar_pid_t pid,
|
int sigar_proc_mem_get(sigar_t *sigar, sigar_pid_t pid,
|
||||||
sigar_proc_mem_t *procmem)
|
sigar_proc_mem_t *procmem)
|
||||||
{
|
{
|
||||||
#ifdef DARWIN
|
#if defined(DARWIN)
|
||||||
mach_port_t task, self = mach_task_self();
|
mach_port_t task, self = mach_task_self();
|
||||||
kern_return_t status;
|
kern_return_t status;
|
||||||
task_basic_info_data_t info;
|
task_basic_info_data_t info;
|
||||||
@ -910,9 +914,9 @@ int sigar_proc_mem_get(sigar_t *sigar, sigar_pid_t pid,
|
|||||||
procmem->share = SIGAR_FIELD_NOTIMPL;
|
procmem->share = SIGAR_FIELD_NOTIMPL;
|
||||||
|
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
#else
|
#elif defined(__FreeBSD__)
|
||||||
int status = sigar_get_pinfo(sigar, pid);
|
int status = sigar_get_pinfo(sigar, pid);
|
||||||
struct kinfo_proc *pinfo = sigar->pinfo;
|
bsd_pinfo_t *pinfo = sigar->pinfo;
|
||||||
|
|
||||||
if (status != SIGAR_OK) {
|
if (status != SIGAR_OK) {
|
||||||
return status;
|
return status;
|
||||||
@ -928,25 +932,49 @@ int sigar_proc_mem_get(sigar_t *sigar, sigar_pid_t pid,
|
|||||||
procmem->page_faults = SIGAR_FIELD_NOTIMPL;
|
procmem->page_faults = SIGAR_FIELD_NOTIMPL;
|
||||||
procmem->minor_faults = SIGAR_FIELD_NOTIMPL;
|
procmem->minor_faults = SIGAR_FIELD_NOTIMPL;
|
||||||
procmem->major_faults = SIGAR_FIELD_NOTIMPL;
|
procmem->major_faults = SIGAR_FIELD_NOTIMPL;
|
||||||
|
#elif defined(__OpenBSD__)
|
||||||
|
int status = sigar_get_pinfo(sigar, pid);
|
||||||
|
bsd_pinfo_t *pinfo = sigar->pinfo;
|
||||||
|
|
||||||
return SIGAR_OK;
|
if (status != SIGAR_OK) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
procmem->size =
|
||||||
|
(pinfo->p_vm_tsize + pinfo->p_vm_dsize + pinfo->p_vm_ssize) * sigar->pagesize;
|
||||||
|
|
||||||
|
procmem->resident = pinfo->p_vm_rssize * sigar->pagesize;
|
||||||
|
|
||||||
|
procmem->share = SIGAR_FIELD_NOTIMPL;
|
||||||
|
|
||||||
|
procmem->minor_faults = pinfo->p_uru_minflt;
|
||||||
|
procmem->major_faults = pinfo->p_uru_majflt;
|
||||||
|
procmem->page_faults = procmem->minor_faults + procmem->major_faults;
|
||||||
#endif
|
#endif
|
||||||
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sigar_proc_cred_get(sigar_t *sigar, sigar_pid_t pid,
|
int sigar_proc_cred_get(sigar_t *sigar, sigar_pid_t pid,
|
||||||
sigar_proc_cred_t *proccred)
|
sigar_proc_cred_t *proccred)
|
||||||
{
|
{
|
||||||
int status = sigar_get_pinfo(sigar, pid);
|
int status = sigar_get_pinfo(sigar, pid);
|
||||||
struct kinfo_proc *pinfo = sigar->pinfo;
|
bsd_pinfo_t *pinfo = sigar->pinfo;
|
||||||
|
|
||||||
if (status != SIGAR_OK) {
|
if (status != SIGAR_OK) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __OpenBSD__
|
||||||
|
proccred->uid = pinfo->p_ruid;
|
||||||
|
proccred->gid = pinfo->p_rgid;
|
||||||
|
proccred->euid = pinfo->p_uid;
|
||||||
|
proccred->egid = pinfo->p_gid;
|
||||||
|
#else
|
||||||
proccred->uid = pinfo->KI_UID;
|
proccred->uid = pinfo->KI_UID;
|
||||||
proccred->gid = pinfo->KI_GID;
|
proccred->gid = pinfo->KI_GID;
|
||||||
proccred->euid = pinfo->KI_EUID;
|
proccred->euid = pinfo->KI_EUID;
|
||||||
proccred->egid = pinfo->KI_EGID;
|
proccred->egid = pinfo->KI_EGID;
|
||||||
|
#endif
|
||||||
|
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
@ -1028,7 +1056,7 @@ int sigar_proc_time_get(sigar_t *sigar, sigar_pid_t pid,
|
|||||||
struct user user;
|
struct user user;
|
||||||
#endif
|
#endif
|
||||||
int status = sigar_get_pinfo(sigar, pid);
|
int status = sigar_get_pinfo(sigar, pid);
|
||||||
struct kinfo_proc *pinfo = sigar->pinfo;
|
bsd_pinfo_t *pinfo = sigar->pinfo;
|
||||||
|
|
||||||
if (status != SIGAR_OK) {
|
if (status != SIGAR_OK) {
|
||||||
return status;
|
return status;
|
||||||
@ -1059,8 +1087,12 @@ int sigar_proc_time_get(sigar_t *sigar, sigar_pid_t pid,
|
|||||||
proctime->sys = tv2msec(user.u_stats.p_ru.ru_stime);
|
proctime->sys = tv2msec(user.u_stats.p_ru.ru_stime);
|
||||||
proctime->total = proctime->user + proctime->sys;
|
proctime->total = proctime->user + proctime->sys;
|
||||||
proctime->start_time = tv2msec(user.u_stats.p_start);
|
proctime->start_time = tv2msec(user.u_stats.p_start);
|
||||||
#else
|
#elif defined(__OpenBSD__)
|
||||||
/*XXX OpenBSD*/
|
/* XXX *_usec */
|
||||||
|
proctime->user = pinfo->p_uutime_sec * SIGAR_MSEC;
|
||||||
|
proctime->sys = pinfo->p_ustime_sec * SIGAR_MSEC;
|
||||||
|
proctime->total = proctime->user + proctime->sys;
|
||||||
|
proctime->start_time = pinfo->p_ustart_sec * SIGAR_MSEC;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
@ -1144,12 +1176,26 @@ int sigar_proc_state_get(sigar_t *sigar, sigar_pid_t pid,
|
|||||||
sigar_proc_state_t *procstate)
|
sigar_proc_state_t *procstate)
|
||||||
{
|
{
|
||||||
int status = sigar_get_pinfo(sigar, pid);
|
int status = sigar_get_pinfo(sigar, pid);
|
||||||
struct kinfo_proc *pinfo = sigar->pinfo;
|
bsd_pinfo_t *pinfo = sigar->pinfo;
|
||||||
|
#ifdef __OpenBSD__
|
||||||
|
int state = pinfo->p_stat;
|
||||||
|
#else
|
||||||
|
int state = pinfo->KI_STAT;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (status != SIGAR_OK) {
|
if (status != SIGAR_OK) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __OpenBSD__
|
||||||
|
SIGAR_SSTRCPY(procstate->name, pinfo->p_comm);
|
||||||
|
procstate->ppid = pinfo->p_ppid;
|
||||||
|
procstate->priority = pinfo->p_priority;
|
||||||
|
procstate->nice = pinfo->p_nice;
|
||||||
|
procstate->tty = pinfo->p_tdev;
|
||||||
|
procstate->threads = SIGAR_FIELD_NOTIMPL;
|
||||||
|
procstate->processor = pinfo->p_cpuid;
|
||||||
|
#else
|
||||||
SIGAR_SSTRCPY(procstate->name, pinfo->KI_COMM);
|
SIGAR_SSTRCPY(procstate->name, pinfo->KI_COMM);
|
||||||
procstate->ppid = pinfo->KI_PPID;
|
procstate->ppid = pinfo->KI_PPID;
|
||||||
procstate->priority = pinfo->KI_PRI;
|
procstate->priority = pinfo->KI_PRI;
|
||||||
@ -1157,6 +1203,7 @@ int sigar_proc_state_get(sigar_t *sigar, sigar_pid_t pid,
|
|||||||
procstate->tty = SIGAR_FIELD_NOTIMPL; /*XXX*/
|
procstate->tty = SIGAR_FIELD_NOTIMPL; /*XXX*/
|
||||||
procstate->threads = SIGAR_FIELD_NOTIMPL;
|
procstate->threads = SIGAR_FIELD_NOTIMPL;
|
||||||
procstate->processor = SIGAR_FIELD_NOTIMPL;
|
procstate->processor = SIGAR_FIELD_NOTIMPL;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef DARWIN
|
#ifdef DARWIN
|
||||||
status = sigar_proc_threads_get(sigar, pid, procstate);
|
status = sigar_proc_threads_get(sigar, pid, procstate);
|
||||||
@ -1165,7 +1212,7 @@ int sigar_proc_state_get(sigar_t *sigar, sigar_pid_t pid,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
switch (pinfo->KI_STAT) {
|
switch (state) {
|
||||||
case SIDL:
|
case SIDL:
|
||||||
procstate->state = 'D';
|
procstate->state = 'D';
|
||||||
break;
|
break;
|
||||||
@ -1461,7 +1508,7 @@ int sigar_proc_fd_get(sigar_t *sigar, sigar_pid_t pid,
|
|||||||
{
|
{
|
||||||
#ifdef __FreeBSD__
|
#ifdef __FreeBSD__
|
||||||
int status;
|
int status;
|
||||||
struct kinfo_proc *pinfo;
|
bsd_pinfo_t *pinfo;
|
||||||
struct filedesc filed;
|
struct filedesc filed;
|
||||||
#if 0
|
#if 0
|
||||||
struct file **ofiles;
|
struct file **ofiles;
|
||||||
|
@ -37,12 +37,18 @@ enum {
|
|||||||
KOFFSET_MAX
|
KOFFSET_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef __OpenBSD__
|
||||||
|
typedef struct kinfo_proc2 bsd_pinfo_t;
|
||||||
|
#else
|
||||||
|
typedef struct kinfo_proc bsd_pinfo_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct sigar_t {
|
struct sigar_t {
|
||||||
SIGAR_T_BASE;
|
SIGAR_T_BASE;
|
||||||
int pagesize;
|
int pagesize;
|
||||||
time_t last_getprocs;
|
time_t last_getprocs;
|
||||||
sigar_pid_t last_pid;
|
sigar_pid_t last_pid;
|
||||||
struct kinfo_proc *pinfo;
|
bsd_pinfo_t *pinfo;
|
||||||
#ifdef DARWIN
|
#ifdef DARWIN
|
||||||
mach_port_t mach_port;
|
mach_port_t mach_port;
|
||||||
#else
|
#else
|
||||||
|
Loading…
Reference in New Issue
Block a user