summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorniklas <niklas@openbsd.org>2000-06-18 17:59:53 +0000
committerniklas <niklas@openbsd.org>2000-06-18 17:59:53 +0000
commit3f2d366d05590ad2483df64f4b1f36a5396a5a8d (patch)
tree3c6d9faaff3fe99c5636857bd2163076be7a3062
parentcorrect logic mistake in in6_pcbnotify, due to indentation. (diff)
downloadwireguard-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.c18
-rw-r--r--bin/ps/ps.18
-rw-r--r--bin/ps/ps.c16
-rw-r--r--lib/libkvm/kvm_proc.c9
-rw-r--r--sys/kern/kern_fork.c5
-rw-r--r--sys/kern/kern_kthread.c5
-rw-r--r--sys/kern/kern_sysctl.c10
-rw-r--r--sys/sys/sysctl.h5
-rw-r--r--sys/sys/vmmeter.h4
-rw-r--r--usr.bin/systat/pigs.c6
-rw-r--r--usr.bin/top/machine.c4
-rw-r--r--usr.bin/vmstat/vmstat.89
-rw-r--r--usr.bin/vmstat/vmstat.c4
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