* Fix a display buglet: if the process list is exhausted before the window's

bottom is reached, clear the remaining lines, lest there be stale process
  entries if the process list shrinks.
* Implement a top(1)-like `user' command in the ps display.
This commit is contained in:
kleink 1999-12-22 14:46:14 +00:00
parent 1a2a0445fa
commit c23c312a55
4 changed files with 58 additions and 11 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: cmdtab.c,v 1.11 1999/12/20 03:45:02 jwise Exp $ */ /* $NetBSD: cmdtab.c,v 1.12 1999/12/22 14:46:14 kleink Exp $ */
/*- /*-
* Copyright (c) 1980, 1992, 1993 * Copyright (c) 1980, 1992, 1993
@ -38,7 +38,7 @@
#if 0 #if 0
static char sccsid[] = "@(#)cmdtab.c 8.1 (Berkeley) 6/6/93"; static char sccsid[] = "@(#)cmdtab.c 8.1 (Berkeley) 6/6/93";
#endif #endif
__RCSID("$NetBSD: cmdtab.c,v 1.11 1999/12/20 03:45:02 jwise Exp $"); __RCSID("$NetBSD: cmdtab.c,v 1.12 1999/12/22 14:46:14 kleink Exp $");
#endif /* not lint */ #endif /* not lint */
#include "systat.h" #include "systat.h"
@ -82,6 +82,11 @@ struct command netstat_commands[] = {
{ 0 } { 0 }
}; };
struct command ps_commands[] = {
{ "user", ps_user, "limit displayed processes to a user"},
{ 0 }
};
struct command vmstat_commands[] = { struct command vmstat_commands[] = {
{ "boot", vmstat_boot, "show total vm stats since boot"}, { "boot", vmstat_boot, "show total vm stats since boot"},
{ "run", vmstat_run, "show running total vm stats"}, { "run", vmstat_run, "show running total vm stats"},
@ -126,7 +131,7 @@ struct mode modes[] = {
initnetstat, opennetstat, closenetstat, netstat_commands, initnetstat, opennetstat, closenetstat, netstat_commands,
CF_LOADAV }, CF_LOADAV },
{ "ps", showps, fetchpigs, labelps, { "ps", showps, fetchpigs, labelps,
initpigs, openpigs, closepigs, 0, initpigs, openpigs, closepigs, ps_commands,
CF_LOADAV }, CF_LOADAV },
{ "swap", showswap, fetchswap, labelswap, { "swap", showswap, fetchswap, labelswap,
initswap, openswap, closeswap, 0, initswap, openswap, closeswap, 0,

View File

@ -1,4 +1,4 @@
/* $NetBSD: extern.h,v 1.16 1999/12/20 04:06:25 jwise Exp $ */ /* $NetBSD: extern.h,v 1.17 1999/12/22 14:46:15 kleink Exp $ */
/*- /*-
* Copyright (c) 1991, 1993 * Copyright (c) 1991, 1993
@ -145,6 +145,7 @@ WINDOW *opennetstat __P((void));
WINDOW *openpigs __P((void)); WINDOW *openpigs __P((void));
WINDOW *openswap __P((void)); WINDOW *openswap __P((void));
WINDOW *opentcp __P((void)); WINDOW *opentcp __P((void));
void ps_user __P((char *));
void redraw __P((int)); void redraw __P((int));
void showbufcache __P((void)); void showbufcache __P((void));
void showicmp __P((void)); void showicmp __P((void));

View File

@ -1,4 +1,4 @@
/* $NetBSD: ps.c,v 1.11 1999/12/20 19:31:47 jwise Exp $ */ /* $NetBSD: ps.c,v 1.12 1999/12/22 14:46:15 kleink Exp $ */
/*- /*-
* Copyright (c) 1999 * Copyright (c) 1999
@ -45,7 +45,7 @@
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
__RCSID("$NetBSD: ps.c,v 1.11 1999/12/20 19:31:47 jwise Exp $"); __RCSID("$NetBSD: ps.c,v 1.12 1999/12/22 14:46:15 kleink Exp $");
#endif /* not lint */ #endif /* not lint */
#include <sys/param.h> #include <sys/param.h>
@ -80,6 +80,9 @@ char *time2str __P((struct kinfo_proc *));
static time_t now; static time_t now;
#define SHOWUSER_ANY (uid_t)-1
static uid_t showuser = SHOWUSER_ANY;
void void
labelps () labelps ()
{ {
@ -103,11 +106,13 @@ showps ()
i = nproc + 1; i = nproc + 1;
if (i > getmaxy(wnd)-2) if (i > getmaxy(wnd)-2)
i = getmaxy(wnd)-1; i = getmaxy(wnd)-1;
for (k = 0; i > 0 ; i--, y++, k++) { for (k = 0; i > 0 ; k++) {
if (pt[k].pt_kp == NULL) /* We're all the way down to the imaginary idle proc */ if (pt[k].pt_kp == NULL) /* We're all the way down to the imaginary idle proc */
return; break;
ep = &pt[k].pt_kp->kp_eproc; ep = &pt[k].pt_kp->kp_eproc;
if (showuser != SHOWUSER_ANY && ep->e_ucred.cr_uid != showuser)
continue;
user = user_from_uid(ep->e_ucred.cr_uid, 0); user = user_from_uid(ep->e_ucred.cr_uid, 0);
pid = pt[k].pt_kp->kp_proc.p_pid; pid = pt[k].pt_kp->kp_proc.p_pid;
pctcpu = 100.0 * pt[k].pt_pctcpu; pctcpu = 100.0 * pt[k].pt_pctcpu;
@ -123,9 +128,13 @@ showps ()
wmove(wnd, y, 0); wmove(wnd, y, 0);
wclrtoeol(wnd); wclrtoeol(wnd);
mvwprintw(wnd, y, 0, "%-8.8s%5d %4.1f %4.1f %6d %5d %-3s %-4s %7s %10.10s %s", mvwprintw(wnd, y++, 0,
user, pid, pctcpu, pctmem, vsz, rss, tty, state, start, time, comm); "%-8.8s%5d %4.1f %4.1f %6d %5d %-3s %-4s %7s %10.10s %s",
user, pid, pctcpu, pctmem, vsz, rss, tty, state, start, time, comm);
i--;
} }
wmove(wnd, y, 0);
wclrtobot(wnd);
} }
int int
@ -384,3 +393,22 @@ time2str(kp)
return timestr; return timestr;
} }
void
ps_user(args)
char *args;
{
uid_t uid;
if (args == NULL)
args = "";
if (strcmp(args, "+") == 0) {
uid = SHOWUSER_ANY;
} else if (uid_from_user(args, &uid) != 0) {
error("%s: unknown user", args);
return;
}
showuser = uid;
display(0);
}

View File

@ -1,4 +1,4 @@
.\" $NetBSD: systat.1,v 1.16 1999/11/15 06:16:57 simonb Exp $ .\" $NetBSD: systat.1,v 1.17 1999/12/22 14:46:15 kleink Exp $
.\" .\"
.\" Copyright (c) 1985, 1990, 1993 .\" Copyright (c) 1985, 1990, 1993
.\" The Regents of the University of California. All rights reserved. .\" The Regents of the University of California. All rights reserved.
@ -281,6 +281,19 @@ by the command
.Xr ps 1 .Xr ps 1
with the flags with the flags
.Fl aux . .Fl aux .
.Pp
The following command is specific to the
.Ic ps
display; the minimum unambiguous prefix may be supplied.
.Pp
.Bl -tag -width Fl -compact
.It Cm user Ar name
Limit the list of processes displayed to those owned by user
.Ar name .
If
.Ar name
is specified as `+', processes owned by any user are displayed (default).
.El
.It Ic swap .It Ic swap
Show information about swap space usage on all the Show information about swap space usage on all the
swap areas configured with swap areas configured with