Mercurial > illumos > illumos-gate
changeset 13821:f353227ba626
3149 ps should have dmodel as an output format
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Eric Schrock <eric.schrock@delphix.com>
Reviewed by: Jason King <jason.brian.king@gmail.com>
Approved by: Dan McDonald <danmcd@nexenta.com>
author | Bryan Cantrill <bryan@joyent.com> |
---|---|
date | Thu, 20 Sep 2012 10:27:49 +0000 |
parents | 2ce1147810ed |
children | d13dbeb3e979 |
files | usr/src/cmd/ps/ps.c usr/src/man/man1/ps.1 |
diffstat | 2 files changed, 64 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/cmd/ps/ps.c Thu Sep 20 08:39:18 2012 -0700 +++ b/usr/src/cmd/ps/ps.c Thu Sep 20 10:27:49 2012 +0000 @@ -24,6 +24,10 @@ * Use is subject to license terms. */ +/* + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ @@ -130,7 +134,8 @@ F_ZONE, /* zone name */ F_ZONEID, /* zone id */ F_CTID, /* process contract id */ - F_LGRP /* process home lgroup */ + F_LGRP, /* process home lgroup */ + F_DMODEL /* process data model */ }; struct field { @@ -204,6 +209,7 @@ { "zoneid", "ZONEID", 5, 5 }, { "ctid", "CTID", 5, 5 }, { "lgrp", "LGRP", 4, 2 }, + { "dmodel", "DMODEL", 6, 6 }, }; #define NFIELDS (sizeof (fname) / sizeof (fname[0])) @@ -1035,33 +1041,61 @@ return (0); } +static int +field_cmp(const void *l, const void *r) +{ + struct def_field *lhs = *((struct def_field **)l); + struct def_field *rhs = *((struct def_field **)r); + + return (strcmp(lhs->fname, rhs->fname)); +} static void usage(void) /* print usage message and quit */ { + struct def_field *df, *sorted[NFIELDS]; + int pos = 80, i = 0; + static char usage1[] = "ps [ -aAdefHlcjLPyZ ] [ -o format ] [ -t termlist ]"; static char usage2[] = "\t[ -u userlist ] [ -U userlist ] [ -G grouplist ]"; static char usage3[] = - "\t[ -p proclist ] [ -g pgrplist ] [ -s sidlist ] [ -z zonelist ] " - "[-h lgrplist]"; + "\t[ -p proclist ] [ -g pgrplist ] [ -s sidlist ]"; static char usage4[] = - " 'format' is one or more of:"; + "\t[ -z zonelist ] [-h lgrplist]"; static char usage5[] = - "\tuser ruser group rgroup uid ruid gid rgid pid ppid pgid " - "sid taskid ctid"; - static char usage6[] = - "\tpri opri pcpu pmem vsz rss osz nice class time etime stime zone " - "zoneid"; - static char usage7[] = - "\tf s c lwp nlwp psr tty addr wchan fname comm args " - "projid project pset lgrp"; + " 'format' is one or more of:"; (void) fprintf(stderr, - gettext("usage: %s\n%s\n%s\n%s\n%s\n%s\n%s\n"), + gettext("usage: %s\n%s\n%s\n%s\n%s"), gettext(usage1), gettext(usage2), gettext(usage3), - gettext(usage4), gettext(usage5), gettext(usage6), gettext(usage7)); + gettext(usage4), gettext(usage5)); + + /* + * Now print out the possible output formats such that they neatly fit + * into eighty columns. Note that the fact that we are determining + * this output programmatically means that a gettext() is impossible -- + * but it would be a mistake to localize the output formats anyway as + * they are tokens for input, not output themselves. + */ + for (df = &fname[0]; df < &fname[NFIELDS]; df++) + sorted[i++] = df; + + (void) qsort(sorted, NFIELDS, sizeof (void *), field_cmp); + + for (i = 0; i < NFIELDS; i++) { + if (pos + strlen((df = sorted[i])->fname) + 1 >= 80) { + (void) fprintf(stderr, "\n\t"); + pos = 8; + } + + (void) fprintf(stderr, "%s%s", pos > 8 ? " " : "", df->fname); + pos += strlen(df->fname) + 1; + } + + (void) fprintf(stderr, "\n"); + exit(1); } @@ -1886,6 +1920,11 @@ /* Display home lgroup */ (void) printf("%*d", width, (int)psinfo->pr_lwp.pr_lgrp); break; + + case F_DMODEL: + (void) printf("%*s", width, + psinfo->pr_dmodel == PR_MODEL_LP64 ? "_LP64" : "_ILP32"); + break; } }
--- a/usr/src/man/man1/ps.1 Thu Sep 20 08:39:18 2012 -0700 +++ b/usr/src/man/man1/ps.1 Thu Sep 20 10:27:49 2012 +0000 @@ -1,6 +1,7 @@ '\" te .\" Copyright 1989 AT&T .\" Copyright (c) 2009, Sun Microsystems, Inc. All Rights Reserved +.\" Copyright (c) 2012, Joyent, Inc. All Rights Reserved .\" Portions Copyright (c) 1992, X/Open Company Limited All Rights Reserved .\" Sun Microsystems, Inc. gratefully acknowledges The Open Group for permission to reproduce portions of its copyrighted documentation. Original documentation from The Open Group can be obtained online at http://www.opengroup.org/bookstore/. .\" The Institute of Electrical and Electronics Engineers and The Open Group, have given us permission to reprint portions of their documentation. In the following statement, the phrase "this text" refers to portions of the system documentation. Portions of this text @@ -1095,6 +1096,16 @@ .RE .sp +.ne 2 +.na +\fB\fBdmodel\fR\fR +.ad +.RS 11n +The data model of the process, printed in the same manner as via +\fBpflags\fR(1). The currently supported data models are _ILP32 and _LP64. +.RE + +.sp .LP Only \fBcomm\fR and \fBargs\fR are allowed to contain blank characters; all others, including the Solaris implementation variables, are not.