diff options
author | deischen <deischen@FreeBSD.org> | 2004-02-22 17:54:32 +0000 |
---|---|---|
committer | deischen <deischen@FreeBSD.org> | 2004-02-22 17:54:32 +0000 |
commit | 7d4838de1e98270717985faeb4575c75d07b9676 (patch) | |
tree | 8de9c227c9fc00c037cc868f2758ee315f8412c3 /sys/kern/kern_proc.c | |
parent | 03f2963fdc806691158a8a21b797b34ad68aa5a2 (diff) | |
download | FreeBSD-src-7d4838de1e98270717985faeb4575c75d07b9676.zip FreeBSD-src-7d4838de1e98270717985faeb4575c75d07b9676.tar.gz |
Add sysctls to allow showing threads for pgrp, tty, uid, ruid,
and pid.
Diffstat (limited to 'sys/kern/kern_proc.c')
-rw-r--r-- | sys/kern/kern_proc.c | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index 7becb69..4dc5e65 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -900,10 +900,18 @@ sysctl_kern_proc(SYSCTL_HANDLER_ARGS) int *name = (int*) arg1; u_int namelen = arg2; struct proc *p; - int flags, doingzomb; + int flags, doingzomb, oid_number; int error = 0; - if (oidp->oid_number == KERN_PROC_PID) { + oid_number = oidp->oid_number; + if (oid_number != KERN_PROC_ALL && + (oid_number & KERN_PROC_INC_THREAD) == 0) + flags = KERN_PROC_NOTHREADS; + else { + flags = 0; + oid_number &= ~KERN_PROC_INC_THREAD; + } + if (oid_number == KERN_PROC_PID) { if (namelen != 1) return (EINVAL); p = pfind((pid_t)name[0]); @@ -913,11 +921,11 @@ sysctl_kern_proc(SYSCTL_HANDLER_ARGS) PROC_UNLOCK(p); return (error); } - error = sysctl_out_proc(p, req, KERN_PROC_NOTHREADS); + error = sysctl_out_proc(p, req, flags); return (error); } - switch (oidp->oid_number) { + switch (oid_number) { case KERN_PROC_ALL: if (namelen != 0) return (EINVAL); @@ -963,12 +971,11 @@ sysctl_kern_proc(SYSCTL_HANDLER_ARGS) PROC_UNLOCK(p); continue; } - flags = 0; /* * TODO - make more efficient (see notes below). * do by session. */ - switch (oidp->oid_number) { + switch (oid_number) { case KERN_PROC_PGRP: /* could do this by traversing pgrp */ @@ -1013,7 +1020,6 @@ sysctl_kern_proc(SYSCTL_HANDLER_ARGS) break; case KERN_PROC_PROC: - flags |= KERN_PROC_NOTHREADS; break; default: @@ -1187,3 +1193,21 @@ 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_PGRP | KERN_PROC_INC_THREAD), pgrp_td, + CTLFLAG_RD, sysctl_kern_proc, "Process table"); + +SYSCTL_NODE(_kern_proc, (KERN_PROC_TTY | KERN_PROC_INC_THREAD), tty_td, + CTLFLAG_RD, sysctl_kern_proc, "Process table"); + +SYSCTL_NODE(_kern_proc, (KERN_PROC_UID | KERN_PROC_INC_THREAD), uid_td, + CTLFLAG_RD, sysctl_kern_proc, "Process table"); + +SYSCTL_NODE(_kern_proc, (KERN_PROC_RUID | KERN_PROC_INC_THREAD), ruid_td, + CTLFLAG_RD, sysctl_kern_proc, "Process table"); + +SYSCTL_NODE(_kern_proc, (KERN_PROC_PID | KERN_PROC_INC_THREAD), pid_td, + CTLFLAG_RD, sysctl_kern_proc, "Process table"); + +SYSCTL_NODE(_kern_proc, (KERN_PROC_PROC | KERN_PROC_INC_THREAD), proc_td, + CTLFLAG_RD, sysctl_kern_proc, "Return process table, no threads"); |