diff options
author | 2000-06-18 17:59:53 +0000 | |
---|---|---|
committer | 2000-06-18 17:59:53 +0000 | |
commit | 3f2d366d05590ad2483df64f4b1f36a5396a5a8d (patch) | |
tree | 3c6d9faaff3fe99c5636857bd2163076be7a3062 | |
parent | correct logic mistake in in6_pcbnotify, due to indentation. (diff) | |
download | wireguard-openbsd-3f2d366d05590ad2483df64f4b1f36a5396a5a8d.tar.xz wireguard-openbsd-3f2d366d05590ad2483df64f4b1f36a5396a5a8d.zip |
Mark kernel threads as system processes. Make ps hide them by default,
show them with -k. Do not try to show RSS based values for them as they
mess up column alignment. vmstat -f now shows kernel threads separately
from rforks too.
-rw-r--r-- | bin/ps/print.c | 18 | ||||
-rw-r--r-- | bin/ps/ps.1 | 8 | ||||
-rw-r--r-- | bin/ps/ps.c | 16 | ||||
-rw-r--r-- | lib/libkvm/kvm_proc.c | 9 | ||||
-rw-r--r-- | sys/kern/kern_fork.c | 5 | ||||
-rw-r--r-- | sys/kern/kern_kthread.c | 5 | ||||
-rw-r--r-- | sys/kern/kern_sysctl.c | 10 | ||||
-rw-r--r-- | sys/sys/sysctl.h | 5 | ||||
-rw-r--r-- | sys/sys/vmmeter.h | 4 | ||||
-rw-r--r-- | usr.bin/systat/pigs.c | 6 | ||||
-rw-r--r-- | usr.bin/top/machine.c | 4 | ||||
-rw-r--r-- | usr.bin/vmstat/vmstat.8 | 9 | ||||
-rw-r--r-- | usr.bin/vmstat/vmstat.c | 4 |
13 files changed, 68 insertions, 35 deletions
diff --git a/bin/ps/print.c b/bin/ps/print.c index 5085550927e..f7d0591b5e3 100644 --- a/bin/ps/print.c +++ b/bin/ps/print.c @@ -1,4 +1,4 @@ -/* $OpenBSD: print.c,v 1.15 2000/05/04 17:26:25 deraadt Exp $ */ +/* $OpenBSD: print.c,v 1.16 2000/06/18 17:59:53 niklas Exp $ */ /* $NetBSD: print.c,v 1.27 1995/09/29 21:58:12 cgd Exp $ */ /*- @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)print.c 8.6 (Berkeley) 4/16/94"; #else -static char rcsid[] = "$OpenBSD: print.c,v 1.15 2000/05/04 17:26:25 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: print.c,v 1.16 2000/06/18 17:59:53 niklas Exp $"; #endif #endif /* not lint */ @@ -242,9 +242,13 @@ state(k, ve) *cp++ = 'E'; if (flag & P_PPWAIT) *cp++ = 'V'; + if (flag & P_SYSTEM) + *cp++ = 'K'; + /* XXX Since P_SYSTEM now shows a K, should L just be for holdcnt? */ if ((flag & P_SYSTEM) || p->p_holdcnt) *cp++ = 'L'; - if (KI_EPROC(k)->e_maxrss / 1024 < pgtok(KI_EPROC(k)->e_vm.vm_rssize)) + if ((flag & P_SYSTEM) == 0 && + KI_EPROC(k)->e_maxrss / 1024 < pgtok(KI_EPROC(k)->e_vm.vm_rssize)) *cp++ = '>'; if (KI_EPROC(k)->e_flag & EPROC_SLEADER) *cp++ = 's'; @@ -470,7 +474,8 @@ rssize(k, ve) v = ve->var; /* XXX don't have info about shared */ - (void)printf("%*d", v->width, pgtok(KI_EPROC(k)->e_vm.vm_rssize)); + (void)printf("%*d", v->width, (KI_PROC(k)->p_flag & P_SYSTEM) ? 0 : + pgtok(KI_EPROC(k)->e_vm.vm_rssize)); } void @@ -481,7 +486,8 @@ p_rssize(k, ve) /* doesn't account for text */ VAR *v; v = ve->var; - (void)printf("%*d", v->width, pgtok(KI_EPROC(k)->e_vm.vm_rssize)); + (void)printf("%*d", v->width, (KI_PROC(k)->p_flag & P_SYSTEM) ? 0 : + pgtok(KI_EPROC(k)->e_vm.vm_rssize)); } void @@ -583,7 +589,7 @@ getpmem(k) p = KI_PROC(k); e = KI_EPROC(k); - if ((p->p_flag & P_INMEM) == 0) + if ((p->p_flag & P_INMEM) == 0 || (p->p_flag & P_SYSTEM)) return (0.0); /* XXX want pmap ptpages, segtab, etc. (per architecture) */ szptudot = USPACE/getpagesize(); diff --git a/bin/ps/ps.1 b/bin/ps/ps.1 index 62d132fb122..04c0ab29ac6 100644 --- a/bin/ps/ps.1 +++ b/bin/ps/ps.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: ps.1,v 1.24 2000/03/17 18:15:15 aaron Exp $ +.\" $OpenBSD: ps.1,v 1.25 2000/06/18 17:59:54 niklas Exp $ .\" $NetBSD: ps.1,v 1.16 1996/03/21 01:36:28 jtc Exp $ .\" .\" Copyright (c) 1980, 1990, 1991, 1993, 1994 @@ -42,7 +42,7 @@ .Nd process status .Sh SYNOPSIS .Nm ps -.Op Fl acCehjlmrSTuvwx +.Op Fl acCehjklmrSTuvwx .Op Fl M Ar core .Op Fl N Ar system .Op Fl O Ar fmt @@ -98,6 +98,8 @@ header per page of information. .It Fl j Print information associated with the following keywords: user, pid, ppid, pgid, sess, jobc, state, tt, time and command. +.It Fl k +Also display information about kernel threads. .It Fl L List the set of available keywords. .It Fl l @@ -296,6 +298,8 @@ swapped. .\" in a garbage collect). .It E The process is trying to exit. +.It K +The process is a kernel thread. .It L The process has pages locked in core (for example, for raw .Tn I/O ) . diff --git a/bin/ps/ps.c b/bin/ps/ps.c index d2e3cc80d78..a4a639864a8 100644 --- a/bin/ps/ps.c +++ b/bin/ps/ps.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ps.c,v 1.13 2000/04/16 02:19:55 ericj Exp $ */ +/* $OpenBSD: ps.c,v 1.14 2000/06/18 17:59:54 niklas Exp $ */ /* $NetBSD: ps.c,v 1.15 1995/05/18 20:33:25 mycroft Exp $ */ /*- @@ -44,7 +44,7 @@ static char copyright[] = #if 0 static char sccsid[] = "@(#)ps.c 8.4 (Berkeley) 4/2/94"; #else -static char rcsid[] = "$OpenBSD: ps.c,v 1.13 2000/04/16 02:19:55 ericj Exp $"; +static char rcsid[] = "$OpenBSD: ps.c,v 1.14 2000/06/18 17:59:54 niklas Exp $"; #endif #endif /* not lint */ @@ -116,7 +116,7 @@ main(argc, argv) pid_t pid; uid_t uid; int all, ch, flag, i, fmt, lineno, nentries; - int prtheader, wflag, what, xflg; + int prtheader, wflag, kflag, what, xflg; char *nlistf, *memf, *swapf, errbuf[_POSIX2_LINE_MAX]; if ((ioctl(STDOUT_FILENO, TIOCGWINSZ, (char *)&ws) == -1 && @@ -130,13 +130,13 @@ main(argc, argv) if (argc > 1) argv[1] = kludge_oldps_options(argv[1]); - all = fmt = prtheader = wflag = xflg = 0; + all = fmt = prtheader = wflag = kflag = xflg = 0; pid = -1; uid = (uid_t) -1; ttydev = NODEV; memf = nlistf = swapf = NULL; while ((ch = getopt(argc, argv, - "acCeghjLlM:mN:O:o:p:rSTt:U:uvW:wx")) != -1) + "acCeghjkLlM:mN:O:o:p:rSTt:U:uvW:wx")) != -1) switch((char)ch) { case 'a': all = 1; @@ -160,6 +160,9 @@ main(argc, argv) fmt = 1; jfmt[0] = '\0'; break; + case 'k': + kflag++; + break; case 'L': showkey(); exit(0); @@ -310,6 +313,9 @@ main(argc, argv) } else if (pid != -1) { what = KERN_PROC_PID; flag = pid; + } else if (kflag) { + what = KERN_PROC_KTHREAD; + flag = 0; } else { what = KERN_PROC_ALL; flag = 0; diff --git a/lib/libkvm/kvm_proc.c b/lib/libkvm/kvm_proc.c index 4602f7c2430..3f2117d058f 100644 --- a/lib/libkvm/kvm_proc.c +++ b/lib/libkvm/kvm_proc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kvm_proc.c,v 1.5 1999/06/22 12:54:45 art Exp $ */ +/* $OpenBSD: kvm_proc.c,v 1.6 2000/06/18 17:59:54 niklas Exp $ */ /* $NetBSD: kvm_proc.c,v 1.30 1999/03/24 05:50:50 mrg Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -77,7 +77,7 @@ #if 0 static char sccsid[] = "@(#)kvm_proc.c 8.3 (Berkeley) 9/23/93"; #else -static char *rcsid = "$OpenBSD: kvm_proc.c,v 1.5 1999/06/22 12:54:45 art Exp $"; +static char *rcsid = "$OpenBSD: kvm_proc.c,v 1.6 2000/06/18 17:59:54 niklas Exp $"; #endif #endif /* LIBC_SCCS and not lint */ @@ -466,6 +466,11 @@ kvm_proclist(kd, what, arg, p, bp, maxcnt) if (eproc.e_pcred.p_ruid != (uid_t)arg) continue; break; + + case KERN_PROC_ALL: + if (proc.p_flag & P_SYSTEM) + continue; + break; } /* * We're going to add another proc to the set. If this diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index b2a08f77625..30eb6228e73 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_fork.c,v 1.31 2000/03/23 16:54:44 art Exp $ */ +/* $OpenBSD: kern_fork.c,v 1.32 2000/06/18 17:59:55 niklas Exp $ */ /* $NetBSD: kern_fork.c,v 1.29 1996/02/09 18:59:34 christos Exp $ */ /* @@ -384,6 +384,9 @@ again: } else if (flags & FORK_RFORK) { forkstat.cntrfork++; forkstat.sizrfork += vm->vm_dsize + vm->vm_ssize; + } else { + forkstat.cntkthread++; + forkstat.sizkthread += vm->vm_dsize + vm->vm_ssize; } /* diff --git a/sys/kern/kern_kthread.c b/sys/kern/kern_kthread.c index 4d4a90fec05..096ec9023ca 100644 --- a/sys/kern/kern_kthread.c +++ b/sys/kern/kern_kthread.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_kthread.c,v 1.7 2000/01/31 19:57:19 deraadt Exp $ */ +/* $OpenBSD: kern_kthread.c,v 1.8 2000/06/18 17:59:55 niklas Exp $ */ /* $NetBSD: kern_kthread.c,v 1.3 1998/12/22 21:21:36 kleink Exp $ */ /*- @@ -83,8 +83,7 @@ kthread_create(func, arg, newpp, fmt, va_alist) * descriptors and don't leave the exit status around for the * parent to wait for. */ - error = fork1(&proc0, FORK_RFORK|FORK_SHAREVM|FORK_NOZOMBIE, NULL, - 0, rv); + error = fork1(&proc0, FORK_SHAREVM|FORK_NOZOMBIE, NULL, 0, rv); if (error) return (error); diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index eca6d0e08da..4ecc9bdd2f0 100644 --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_sysctl.c,v 1.35 2000/06/05 11:02:51 art Exp $ */ +/* $OpenBSD: kern_sysctl.c,v 1.36 2000/06/18 17:59:55 niklas Exp $ */ /* $NetBSD: kern_sysctl.c,v 1.17 1996/05/20 17:49:05 mrg Exp $ */ /*- @@ -715,7 +715,8 @@ sysctl_doproc(name, namelen, where, sizep) struct eproc eproc; int error = 0; - if (namelen != 2 && !(namelen == 1 && name[0] == KERN_PROC_ALL)) + if (namelen != 2 && !(namelen == 1 && + (name[0] == KERN_PROC_ALL || name[0] == KERN_PROC_KTHREAD))) return (EINVAL); p = LIST_FIRST(&allproc); doingzomb = 0; @@ -760,6 +761,11 @@ again: if (p->p_cred->p_ruid != (uid_t)name[1]) continue; break; + + case KERN_PROC_ALL: + if (p->p_flag & P_SYSTEM) + continue; + break; } if (buflen >= sizeof(struct kinfo_proc)) { fill_eproc(p, &eproc); diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h index 4f170c19ba0..c093a50bcf4 100644 --- a/sys/sys/sysctl.h +++ b/sys/sys/sysctl.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sysctl.h,v 1.29 2000/02/22 19:28:05 deraadt Exp $ */ +/* $OpenBSD: sysctl.h,v 1.30 2000/06/18 17:59:55 niklas Exp $ */ /* $NetBSD: sysctl.h,v 1.16 1996/04/09 20:55:36 cgd Exp $ */ /* @@ -199,13 +199,14 @@ struct ctlname { /* * KERN_PROC subtypes */ -#define KERN_PROC_ALL 0 /* everything */ +#define KERN_PROC_ALL 0 /* everything but kernel threads */ #define KERN_PROC_PID 1 /* by process id */ #define KERN_PROC_PGRP 2 /* by process group id */ #define KERN_PROC_SESSION 3 /* by session of pid */ #define KERN_PROC_TTY 4 /* by controlling tty */ #define KERN_PROC_UID 5 /* by effective uid */ #define KERN_PROC_RUID 6 /* by real uid */ +#define KERN_PROC_KTHREAD 7 /* also return kernel threads */ /* * KERN_PROC subtype ops return arrays of augmented proc structures: diff --git a/sys/sys/vmmeter.h b/sys/sys/vmmeter.h index 797e9a2bb06..3cb9b7ecadd 100644 --- a/sys/sys/vmmeter.h +++ b/sys/sys/vmmeter.h @@ -1,4 +1,4 @@ -/* $OpenBSD: vmmeter.h,v 1.8 2000/02/21 20:00:08 art Exp $ */ +/* $OpenBSD: vmmeter.h,v 1.9 2000/06/18 17:59:55 niklas Exp $ */ /* $NetBSD: vmmeter.h,v 1.9 1995/03/26 20:25:04 jtc Exp $ */ /*- @@ -122,9 +122,11 @@ struct forkstat int cntfork; /* number of fork() calls */ int cntvfork; /* number of vfork() calls */ int cntrfork; /* number of rfork() calls */ + int cntkthread; /* number of kernel threads created */ int sizfork; /* VM pages affected by fork() */ int sizvfork; /* VM pages affected by vfork() */ int sizrfork; /* VM pages affected by rfork() */ + int sizkthread; /* VM pages affected by kernel threads */ }; #endif /* __VMMETER_H__ */ diff --git a/usr.bin/systat/pigs.c b/usr.bin/systat/pigs.c index ad156fcc13f..163dbef4efa 100644 --- a/usr.bin/systat/pigs.c +++ b/usr.bin/systat/pigs.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pigs.c,v 1.5 1997/12/19 09:03:33 deraadt Exp $ */ +/* $OpenBSD: pigs.c,v 1.6 2000/06/18 17:59:55 niklas Exp $ */ /* $NetBSD: pigs.c,v 1.3 1995/04/29 05:54:50 cgd Exp $ */ /*- @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)pigs.c 8.2 (Berkeley) 9/23/93"; #endif -static char rcsid[] = "$OpenBSD: pigs.c,v 1.5 1997/12/19 09:03:33 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: pigs.c,v 1.6 2000/06/18 17:59:55 niklas Exp $"; #endif /* not lint */ /* @@ -190,7 +190,7 @@ fetchpigs() if (namelist[X_FIRST].n_type == 0) return; - if ((kpp = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nproc)) == NULL) { + if ((kpp = kvm_getprocs(kd, KERN_PROC_KTHREAD, 0, &nproc)) == NULL) { error("%s", kvm_geterr(kd)); if (pt) free(pt); diff --git a/usr.bin/top/machine.c b/usr.bin/top/machine.c index 302e258f1f0..517587959f9 100644 --- a/usr.bin/top/machine.c +++ b/usr.bin/top/machine.c @@ -1,4 +1,4 @@ -/* $OpenBSD: machine.c,v 1.18 1999/11/14 09:03:46 deraadt Exp $ */ +/* $OpenBSD: machine.c,v 1.19 2000/06/18 17:59:56 niklas Exp $ */ /* * top - a top users display for Unix @@ -351,7 +351,7 @@ int (*compare) __P((const void *, const void *)); int show_command; - if ((pbase = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nproc)) == NULL) { + if ((pbase = kvm_getprocs(kd, KERN_PROC_KTHREAD, 0, &nproc)) == NULL) { warnx("%s", kvm_geterr(kd)); quit(23); } diff --git a/usr.bin/vmstat/vmstat.8 b/usr.bin/vmstat/vmstat.8 index 646bd81318b..79fc33035e2 100644 --- a/usr.bin/vmstat/vmstat.8 +++ b/usr.bin/vmstat/vmstat.8 @@ -1,4 +1,4 @@ -.\" $OpenBSD: vmstat.8,v 1.15 2000/03/14 14:58:25 aaron Exp $ +.\" $OpenBSD: vmstat.8,v 1.16 2000/06/18 17:59:56 niklas Exp $ .\" $NetBSD: vmstat.8,v 1.12 1996/05/10 23:19:30 thorpej Exp $ .\" .\" Copyright (c) 1986, 1993 @@ -69,10 +69,9 @@ interval is specified, the default is 1 second. Report on the number .Xr fork 2 , .Xr vfork 2 , -and -.Xr rfork 2 -system calls since system startup, and the number of pages of virtual memory -involved in each. +.Xr rfork 2 , +system calls as well as kernel thread creations since system startup, +and the number of pages of virtual memory involved in each. .It Fl i Report on the number of interrupts taken by each device since system startup. diff --git a/usr.bin/vmstat/vmstat.c b/usr.bin/vmstat/vmstat.c index d8cb9819a32..66782e04741 100644 --- a/usr.bin/vmstat/vmstat.c +++ b/usr.bin/vmstat/vmstat.c @@ -1,5 +1,5 @@ /* $NetBSD: vmstat.c,v 1.29.4.1 1996/06/05 00:21:05 cgd Exp $ */ -/* $OpenBSD: vmstat.c,v 1.35 1999/12/12 00:52:21 hugh Exp $ */ +/* $OpenBSD: vmstat.c,v 1.36 2000/06/18 17:59:56 niklas Exp $ */ /* * Copyright (c) 1980, 1986, 1991, 1993 @@ -655,6 +655,8 @@ doforkst() fks.cntvfork, fks.sizvfork, (double)fks.sizvfork / (fks.cntvfork ? fks.cntvfork : 1)); (void)printf("%d rforks, %d pages, average %.2f\n", fks.cntrfork, fks.sizrfork, (double)fks.sizrfork / (fks.cntrfork ? fks.cntrfork : 1)); + (void)printf("%d kthread creations, %d pages, average %.2f\n", + fks.cntkthread, fks.sizkthread, (double)fks.sizkthread / (fks.cntkthread ? fks.cntkthread : 1)); } void |