Subject: Re: standards/17497: POSIX.1-2001: ps -A not supported
To: Ben Harris <bjh21@netbsd.org>
From: Simon Burge <simonb@wasabisystems.com>
List: netbsd-bugs
Date: 07/07/2002 20:55:52
On Sun, Jul 07, 2002 at 08:07:19PM +1000, Simon Burge wrote:
> On Sun, Jul 07, 2002 at 11:02:02AM +0100, Ben Harris wrote:
>
> > That's why I said "POSIX". The POSIX.1-2001 version of ps (i.e. IEEE
> > 1003.1-2001 without the XSI option) should't have any conflicts with our
> > one. Unfortunately, because of the way the shading is done in
> > 1003.1-2001, it's a bit hard to see, but the POSIX synopsis boils down to:
> >
> > ps [-aA] [-G grouplist] [-o format] [-p proclist] [-t termlist]
> > [-U userlist]
>
> Ok, so we don't do -A and -G, and we don't support lists for -{p,t,U}.
> That's not too bad...
The following patch adds -A and -G (again, for a single value and not a
list). I'll commit that soonish. We need to come up with some words
for the "STANDARDS" section of the manual page. There's some variations
looking at other man pages. For cat(1):
The cat utility is expected to conform to the IEEE Std 1003.2-1992
(``POSIX.2'') specification.
The flags [-benstv] are extensions to the specification.
For cp(1):
The cp utility is expected to be IEEE Std 1003.2 (``POSIX.2'') compati-
ble.
For test(1):
The test utility implements a superset of the IEEE Std 1003.2
(``POSIX.2'') specification.
Also, according to SUSv3, -U is for "real user ID numbers or login
names" whereas we use it for the effective user ID, so we'd have to
document that difference.
Something like:
The ps utility mostly implements a superset of the IEEE Std
1003.1-2001 (``POSIX.2'') specification. The -U option to
the ps utility uses the effective user ID instead of the real
user ID, and the -G, -p, -t, and -U options handle only a
single argument instead of a list.
sound ok?
Simon.
--
Simon Burge <simonb@wasabisystems.com>
NetBSD Development, Support and Service: http://www.wasabisystems.com/
Index: ps.1
===================================================================
RCS file: /cvsroot/basesrc/bin/ps/ps.1,v
retrieving revision 1.54
diff -d -p -u -r1.54 ps.1
--- ps.1 2002/06/19 08:11:56 1.54
+++ ps.1 2002/07/07 10:46:59
@@ -41,8 +41,10 @@
.Nd process status
.Sh SYNOPSIS
.Nm ""
-.Op Fl acCehjlmrSTuvwx
+.Op Fl aAcCehjlmrSTuvwx
.Bk -words
+.Op Fl G Ar gid
+.Ek
.Op Fl M Ar core
.Ek
.Bk -words
@@ -90,7 +92,10 @@ state, and associated command.
The options are as follows:
.Bl -tag -width indent
.It Fl a
-Display information about other users' processes as well as your own.
+Display information about other users' processes that have controlling
+terminals as well as your own.
+.It Fl A
+Display information about all processes.
.It Fl c
Do not display full command with arguments, but only the
executable name.
@@ -105,6 +110,10 @@ no effect).
.It Fl e
Display the environment as well. The environment for other
users' processes can only be displayed by the super-user.
+.It Fl G
+Displays processes whose real gid has been given to the
+.Fl G
+switch.
.It Fl h
Repeat the information header as often as necessary to guarantee one
header per page of information.
Index: ps.c
===================================================================
RCS file: /cvsroot/basesrc/bin/ps/ps.c,v
retrieving revision 1.47
diff -d -p -u -r1.47 ps.c
--- ps.c 2002/06/19 08:11:56 1.47
+++ ps.c 2002/07/07 10:46:59
@@ -112,7 +112,7 @@ __RCSID("$NetBSD: ps.c,v 1.47 2002/06/19
* ARGOPTS must contain all option characters that take arguments
* (except for 't'!) - it is used in kludge_oldps_options()
*/
-#define GETOPTSTR "acCeghjKLlM:mN:O:o:p:rSTt:U:uvW:wx"
+#define GETOPTSTR "aAcCegG:hjKLlM:mN:O:o:p:rSTt:U:uvW:wx"
#define ARGOPTS "MNOopUW"
struct kinfo_proc2 *kinfo;
@@ -181,6 +181,11 @@ main(argc, argv)
what = KERN_PROC_ALL;
flag = 0;
break;
+ case 'A':
+ what = KERN_PROC_ALL;
+ flag = 0;
+ xflg = 1;
+ break;
case 'c':
commandonly = 1;
break;
@@ -192,6 +197,11 @@ main(argc, argv)
break;
case 'g':
break; /* no-op */
+ case 'G':
+ what = KERN_PROC_RGID;
+ flag = atol(optarg);
+ xflg = 1;
+ break;
case 'h':
prtheader = ws.ws_row > 5 ? ws.ws_row : 22;
break;