fix printf formatting of "ps" (aka "show all proc") so that lines never

overflow (always hated that).

replaced "/m" flag with:
	/a == show process address info
	/n == show normal process info [currently the default]
	/w == show process wait/emul info
This commit is contained in:
chuck 1997-10-24 18:26:36 +00:00
parent c33b782b4e
commit e0ced7363a
1 changed files with 56 additions and 19 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: db_xxx.c,v 1.1 1997/05/21 19:54:00 gwr Exp $ */
/* $NetBSD: db_xxx.c,v 1.2 1997/10/24 18:26:36 chuck Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1991, 1993
@ -105,32 +105,69 @@ db_show_all_procs(addr, haddr, count, modif)
db_expr_t count;
char *modif;
{
int map = modif[0] == 'm';
char *mode;
int doingzomb = 0;
struct proc *p, *pp;
if (modif[0] == 0)
modif[0] = 'n'; /* default == normal mode */
mode = strchr("mawn", modif[0]);
if (mode == NULL || *mode == 'm') {
db_printf("usage: show all procs [/a] [/n] [/w]\n");
db_printf("\t/a == show process address info\n");
db_printf("\t/n == show normal process info [default]\n");
db_printf("\t/w == show process wait/emul info\n");
return;
}
p = allproc.lh_first;
db_printf(" pid proc addr %s comm wchan\n",
map ? "map " : "uid ppid pgrp flag stat em ");
switch (*mode) {
case 'a':
db_printf("PID %10s %18s %18s %18s\n",
"COMMAND", "STRUCT PROC *", "UAREA *", "VMSPACE/VM_MAP");
break;
case 'n':
db_printf("PID %10s %10s %10s S %7s %16s %7s\n",
"PPID", "PGRP", "UID", "FLAGS", "COMMAND", "WAIT");
break;
case 'w':
db_printf("PID %16s %8s %18s %s\n",
"COMMAND", "EMUL", "WAIT-CHANNEL", "WAIT-MSG");
break;
}
while (p != 0) {
pp = p->p_pptr;
if (p->p_stat) {
db_printf("%5d %p %p ",
p->p_pid, p, p->p_addr);
if (map)
db_printf("%p %s ",
p->p_vmspace, p->p_comm);
else
db_printf("%3d %5d %5d %06x %d %s %s ",
p->p_cred->p_ruid, pp ? pp->p_pid : -1,
p->p_pgrp->pg_id, p->p_flag, p->p_stat,
p->p_emul->e_name, p->p_comm);
if (p->p_wchan) {
if (p->p_wmesg)
db_printf("%s ", p->p_wmesg);
db_printf("%p", p->p_wchan);
db_printf("%-10d ", p->p_pid);
switch (*mode) {
case 'a':
db_printf("%10.10s %18p %18p %18p\n",
p->p_comm, p, p->p_addr, p->p_vmspace);
break;
case 'n':
db_printf("%10d %10d %10d %d %#7x %16s %7.7s\n",
pp ? pp->p_pid : -1, p->p_pgrp->pg_id,
p->p_cred->p_ruid, p->p_stat, p->p_flag,
p->p_comm, (p->p_wchan && p->p_wmesg) ?
p->p_wmesg : "");
break;
case 'w':
db_printf("%16s %8s %18p %s\n", p->p_comm,
p->p_emul->e_name, p->p_wchan,
(p->p_wchan && p->p_wmesg) ?
p->p_wmesg : "");
break;
}
db_printf("\n");
}
p = p->p_list.le_next;
if (p == 0 && doingzomb == 0) {