aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorGarance A Drosehn <gad@FreeBSD.org>2004-06-19 14:03:00 +0000
committerGarance A Drosehn <gad@FreeBSD.org>2004-06-19 14:03:00 +0000
commit078842c5c9bc06b122d794fa8d18c60562b66f28 (patch)
tree251dedfcb1b51b6557126893a7d297ed64442a89 /sys
parentd688cb4c0db6368d9e83401ec52e20899c739111 (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/kern_proc.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c
index c7571245a2472..268076a40367c 100644
--- a/sys/kern/kern_proc.c
+++ b/sys/kern/kern_proc.c
@@ -694,10 +694,11 @@ fill_kinfo_thread(struct thread *td, struct kinfo_proc *kp)
kp->ki_start = p->p_stats->p_start;
timevaladd(&kp->ki_start, &boottime);
kp->ki_rusage = p->p_stats->p_ru;
- kp->ki_childtime.tv_sec = p->p_stats->p_cru.ru_utime.tv_sec +
- p->p_stats->p_cru.ru_stime.tv_sec;
- kp->ki_childtime.tv_usec = p->p_stats->p_cru.ru_utime.tv_usec +
- p->p_stats->p_cru.ru_stime.tv_usec;
+ kp->ki_childstime = p->p_stats->p_cru.ru_stime;
+ kp->ki_childutime = p->p_stats->p_cru.ru_utime;
+ /* Some callers want child-times in a single value */
+ kp->ki_childtime = kp->ki_childstime;
+ timevaladd(&kp->ki_childtime, &kp->ki_childutime);
}
if (p->p_state != PRS_ZOMBIE) {
#if 0
@@ -805,6 +806,9 @@ fill_kinfo_thread(struct thread *td, struct kinfo_proc *kp)
strlcpy(kp->ki_comm, p->p_comm, sizeof(kp->ki_comm));
strlcpy(kp->ki_ocomm, p->p_comm, sizeof(kp->ki_ocomm));
}
+ if (p->p_sysent && p->p_sysent->sv_name != NULL &&
+ p->p_sysent->sv_name[0] != '\0')
+ strlcpy(kp->ki_emul, p->p_sysent->sv_name, sizeof(kp->ki_emul));
kp->ki_siglist = p->p_siglist;
SIGSETOR(kp->ki_siglist, td->td_siglist);
kp->ki_sigmask = td->td_sigmask;
@@ -978,6 +982,14 @@ sysctl_kern_proc(SYSCTL_HANDLER_ARGS)
*/
switch (oid_number) {
+ case KERN_PROC_GID:
+ if (p->p_ucred == NULL ||
+ p->p_ucred->cr_gid != (gid_t)name[0]) {
+ PROC_UNLOCK(p);
+ continue;
+ }
+ break;
+
case KERN_PROC_PGRP:
/* could do this by traversing pgrp */
if (p->p_pgrp == NULL ||
@@ -1187,6 +1199,9 @@ SYSCTL_NODE(_kern, KERN_PROC, proc, CTLFLAG_RD, 0, "Process table");
SYSCTL_PROC(_kern_proc, KERN_PROC_ALL, all, CTLFLAG_RD|CTLTYPE_STRUCT,
0, 0, sysctl_kern_proc, "S,proc", "Return entire process table");
+SYSCTL_NODE(_kern_proc, KERN_PROC_GID, gid, CTLFLAG_RD,
+ sysctl_kern_proc, "Process table");
+
SYSCTL_NODE(_kern_proc, KERN_PROC_PGRP, pgrp, CTLFLAG_RD,
sysctl_kern_proc, "Process table");
@@ -1217,6 +1232,9 @@ SYSCTL_NODE(_kern_proc, KERN_PROC_ARGS, args, CTLFLAG_RW | CTLFLAG_ANYBODY,
SYSCTL_NODE(_kern_proc, KERN_PROC_SV_NAME, sv_name, CTLFLAG_RD,
sysctl_kern_proc_sv_name, "Process syscall vector name (ABI type)");
+SYSCTL_NODE(_kern_proc, (KERN_PROC_GID | KERN_PROC_INC_THREAD), gid_td,
+ CTLFLAG_RD, sysctl_kern_proc, "Process table");
+
SYSCTL_NODE(_kern_proc, (KERN_PROC_PGRP | KERN_PROC_INC_THREAD), pgrp_td,
CTLFLAG_RD, sysctl_kern_proc, "Process table");