Date: Tue, 15 Mar 2005 17:07:00 -0500 From: Garance A Drosihn <drosih@rpi.edu> To: Pawel Jakub Dawidek <pjd@freebsd.org>, freebsd-arch@freebsd.org Subject: Re: System processes recognition (Adding P_KTHREAD to swapper) Message-ID: <p06210202be5d09b2ca17@[128.113.24.47]> In-Reply-To: <20050315125136.GH9291@darkness.comp.waw.pl> References: <20050315125136.GH9291@darkness.comp.waw.pl>
next in thread | previous in thread | raw e-mail | index | archive | help
At 1:51 PM +0100 3/15/05, Pawel Jakub Dawidek wrote:
>Hi.
>
>I found, that there is no way to know if the given process is a system
>(kernel) process or not:
>
>- P_SYSTEM flag is used also for userland processes (init),
>- P_KTHREAD flag is not used for swapper,
>- ps(1) thinks, that it found system process when there are
>   no arguments, checking:   (argv == NULL || argv[0] == NULL)
>   but this is not true:
>
>	char *argv[1] = { NULL };
>	execve("/path/to/somewhere", argv, NULL);
>
>   The /path/to/somewhere process will be recognized by ps(1)
>   as a system process.
>
>The easiest way to fix it, is to add P_KTHREAD flag to the
>swapper, I think:
Something like this would be helpful, but I don't know enough
kernel-stuff to know if there would be any side-effects by
setting that bit.  If that doesn't work, then we could have
pkill/pgrep/ps check for 'pid == 0 && uid == 0', and assume
any process that matches is also a "kernel thread process".
But obviously it would be cleaner if we could just set that
bit on the swapper process...  I suppose I could just try that
on a test system, and see if the system goes haywire  :-)
-- 
Garance Alistair Drosehn            =   gad@gilead.netel.rpi.edu
Senior Systems Programmer           or  gad@freebsd.org
Rensselaer Polytechnic Institute    or  drosih@rpi.edu
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?p06210202be5d09b2ca17>
