Subject: Re: Using the kernel to get argv for a process.
To: Giles Lean <giles@nemeton.com.au>
From: Simon Burge <simonb@netbsd.org>
List: tech-kern
Date: 04/29/2000 17:12:56
Giles Lean wrote:
> On Fri, 28 Apr 2000 00:24:25 +1000 Simon Burge wrote:
>
> > So, is there any reasons not to add the equivalent of
> >
> > sysctl(CTL_KERN, KERN_PROC_ARGV, pid, buf, len)
> > and
> > sysctl(CTL_KERN, KERN_PROC_ENVP, pid, buf, len)
> >
> > and completely drop sgid from ps (and probably top and w/uptime as
> > well)?
>
> What effect will this have on processes that (try to) adjust argv[0]?
There'll be no change to how things are currently done with ps(1). All
I was thinking of was moving from having ps chase vm page maps and argv
vectors to having the kernel do that. It'll still start from each
process' __ps_strings.
> How this is done and if it is possible seems to vary from OS to OS;
> the NetBSD magic incantation appears to involve __ps_strings as known
> to setproctitle(3), but I've not looked at the kernel code.
All the kernel does is set up the initial argv/envp and __ps_strings in
the exec() handler. As long as the argv pointer in __ps_strings is kept
up to date (as setproctitle(3) does) everything will be ok.
> Personally I don't care if the feature goes away -- a non-setuid ps is
> preferred -- but sendmail administrators might miss the feature.
There will be no user-visible changes, except that the setgid bit will
disappear and an old ps will work on a new kernel without a "proc size
mismatch" error. These are not bad things :-)
Simon.