Date: Thu, 12 Feb 2004 16:57:58 -0500 (EST) From: Daniel Eischen <eischen@vigrid.com> To: Scott Long <scottl@freebsd.org> Cc: freebsd-threads@freebsd.org Subject: Re: Should ps -p list threads? Message-ID: <Pine.GSO.4.10.10402121640110.18978-100000@pcnet5.pcnet.com> In-Reply-To: <Pine.GSO.4.10.10402121520080.21070-100000@pcnet5.pcnet.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 12 Feb 2004, Daniel Eischen wrote: > On Thu, 12 Feb 2004, Scott Long wrote: > > > > Yeah, it's probably cleaner that way. Still, you'll have to deal with > > KERN_PROC_PROC vs. KERN_PROC_ALL. Maybe just remove both and have > > KERN_PROC_THREAD be a modifier for KERN_PROC_PID. > > I was just going to allow them for backward compatibility. Using > KERN_PROC_ALL would imply KERN_PROC_THREADS. > > > Are you > > willing to do the kernel work for this too? > > Preliminary (untested) patch just to show you where I was headed: > > http://people.freebsd.org/~deischen/kse/sys.diffs.021204 > > I'll test and debug it, make associated changes in libkvm and > ps if you think the idea is OK. Bahh. You can't seem to pass flags so that sysctl() doesn't look at them (from kern_proc.c): 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_PGRP, pgrp, CTLFLAG_RD, sysctl_kern_proc, "Process table"); SYSCTL_NODE(_kern_proc, KERN_PROC_TTY, tty, CTLFLAG_RD, sysctl_kern_proc, "Process table"); SYSCTL_NODE(_kern_proc, KERN_PROC_UID, uid, CTLFLAG_RD, sysctl_kern_proc, "Process table"); SYSCTL_NODE(_kern_proc, KERN_PROC_RUID, ruid, CTLFLAG_RD, sysctl_kern_proc, "Process table"); SYSCTL_NODE(_kern_proc, KERN_PROC_PID, pid, CTLFLAG_RD, sysctl_kern_proc, "Process table"); SYSCTL_NODE(_kern_proc, KERN_PROC_PROC, proc, CTLFLAG_RD, sysctl_kern_proc, "Return process table, no threads"); SYSCTL_NODE(_kern_proc, KERN_PROC_ARGS, args, CTLFLAG_RW | CTLFLAG_ANYBODY, sysctl_kern_proc_args, "Process argument list"); SYSCTL_NODE(_kern_proc, KERN_PROC_SV_NAME, sv_name, CTLFLAG_RD, sysctl_kern_proc_sv_name, "Process syscall vector name (ABI type)"); Anything other than the KERN_PROC_foo shown above is treated as invalid. A quick and ugly way is to add additional sysctl nodes for "| KERN_PROC_THREADS": SYSCTL_NODE(_kern_proc, KERN_PROC_PGRP, pgrp, CTLFLAG_RD, sysctl_kern_proc, "Process table"); SYSCTL_NODE(_kern_proc, KERN_PROC_THREADS | KERN_PROC_PGRP, pgrp, CTLFLAG_RD, sysctl_kern_proc, "Process table"); SYSCTL_NODE(_kern_proc, KERN_PROC_TTY, tty, CTLFLAG_RD, sysctl_kern_proc, "Process table"); SYSCTL_NODE(_kern_proc, KERN_PROC_THREADS | KERN_PROC_TTY, tty, CTLFLAG_RD, sysctl_kern_proc, "Process table"); ... The other way is to add a parameter to the mib just for flags but I'm not sure that it's possible to have more than one parameter to a sysctl node. -- Dan Eischen
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.10.10402121640110.18978-100000>