System processes recognition.

Pawel Jakub Dawidek pjd at FreeBSD.org
Tue Mar 15 04:51:38 PST 2005


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
  (argv == NULL || argv[0] == NULL), but this is not true:
	char *argv[1] = { NULL };

	execve("/path/to/somewhere", argv, NULL);
  /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:

--- init_main.c	17 Feb 2005 10:00:09 -0000	1.255
+++ init_main.c	15 Mar 2005 12:48:04 -0000
@@ -365,7 +365,7 @@ proc0_init(void *dummy __unused)
 	session0.s_leader = p;
 
 	p->p_sysent = &null_sysvec;
-	p->p_flag = P_SYSTEM;
+	p->p_flag = P_SYSTEM | P_KTHREAD;
 	p->p_sflag = PS_INMEM;
 	p->p_state = PRS_NORMAL;
 	knlist_init(&p->p_klist, &p->p_mtx);

Opinions?

-- 
Pawel Jakub Dawidek                       http://www.wheel.pl
pjd at FreeBSD.org                           http://www.FreeBSD.org
FreeBSD committer                         Am I Evil? Yes, I Am!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-arch/attachments/20050315/94c3ab71/attachment.bin


More information about the freebsd-arch mailing list