Subject: Re: bin/34271 (ps doesn't sort correctly)
To: None <gnats-admin@netbsd.org, netbsd-bugs@netbsd.org, zafer@aydogan.de>
From: Alan Barrett <apb@netbsd.org>
List: netbsd-bugs
Date: 10/01/2006 20:55:02
The following reply was made to PR bin/34271; it has been noted by GNATS.

From: Alan Barrett <apb@netbsd.org>
To: Zafer Aydogan <zafer@aydogan.de>
Cc: gnats-bugs@netbsd.org, netbsd-bugs@netbsd.org
Subject: Re: bin/34271 (ps doesn't sort correctly)
Date: Sun, 1 Oct 2006 22:52:47 +0200

 On Sun, 01 Oct 2006, Zafer Aydogan wrote:
 > It's odd. If you separate the the options with an hyphen (-m -r), then
 > only the first argument is used.
 > 
 > # ps -r -m -O %cpu,vsz
 >  PID %CPU   VSZ TTY   STAT    TIME COMMAND
 > 20182 66.6   224 ttyp1 R+   7:11.19 top
 >  206  0.9 24596 ttyp0 Sa+  2:59.69 /usr/pkg/lib/firefox/firefox-bin
 >  797  0.0  1332 ttyE6 S    0:05.22 icewm
 > 18387  0.0   240 ttyp1 I    0:00.02 ksh
 > [...]
 
 No, both arguments are used, in the order you specified.  It first sorts
 by %cpu ("-r"), then if multiple lines have teh same %cpu value, it
 sorts by vsz ("-m").  This is exactly what I would expect.
 
 > as you can see, this is sorted by -r (%cpu) and the second argument -m
 > is ignored.
 
 No, the -m is not ignored; it specifies a secondary sort key for when
 multiple processes have the same %cpu.
 
 > if I enter:
 > 
 > # ps -m -r -O %cpu,vsz
 >  PID %CPU   VSZ TTY   STAT    TIME COMMAND
 >  206  5.3 24596 ttyp0 Sa+  3:08.42 /usr/pkg/lib/firefox/firefox-bin
 >  797  0.0  1332 ttyE6 S    0:05.34 icewm
 > 18387  0.0   240 ttyp1 I    0:00.02 ksh
 >  543  0.0   228 ttyp0 IWs  0:00.02 -sh (csh)
 > 20182 59.8   224 ttyp1 R+   8:02.65 top
 > 18093  0.0   220 ttyp4 Ss   0:00.02 -sh (csh)
 > [...]
 >
 > then again the second argument -r (%cpu) is ignored and it is sorted
 > my -m (vsz).
 
 No, the second argument is not ignored.  "-m -r" means "first sort by
 vsz, and if the vsz values are the same then sort by %cpu".  As far as I
 can tell, that's exactly what happened.
 
 > This is wrong. -r and -m are mutually exclusive.
 
 Are you saying that you want "-m -r" to behave just like "-r", ignoring
 the "-m"?  And similarly do you want "-r -m" to behave like "-m",
 ignoring the "-r"?  Why do you expect that behaviour?
 
 > but, if you use -mr or -rm (written together), then -m overrides -r (see 
 > PR).
 > 
 > # ps -mr -O %cpu,vsz
 >  PID %CPU   VSZ TTY   STAT     TIME COMMAND
 >  206  2.5 24904 ttyp0 Sa+   4:07.61 /usr/pkg/lib/firefox/firefox-bin
 >  797  0.0  1332 ttyE6 S     0:06.45 icewm
 > 18387  0.0   240 ttyp1 I     0:00.02 ksh
 >  543  0.0   228 ttyp0 IWs   0:00.02 -sh (csh)
 > 20182 63.4   224 ttyp1 R+   17:02.07 top
 > [...]
 
 That looks fine to me.  "-mr" is treated just like "-m -r", which in turn
 means the same as "-k vsz -k %cpu" or "-k vsz,%cpu", which means "primary
 sort key is vsz; secondary sort key is %cpu".
 
 > as you see, the last argument is r, but the output is sorted by m
 > (vsz).  This is wrong, aslong m and r are mutually exclusive, the last
 > argument wins.
 
 No, they are both applied, in the order specified, with the first one
 being the primary sort key.
 
 --apb (Alan Barrett)