Czy „ps -u” jest naprawdę złą składnią?

75

IMHO ps -upokazuje bardzo przydatne wyjście, znacznie lepsze niż ps -u $USER:

$ ps -u
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
elastic   234897  0.0  0.0 105980  1336 pts/2    S+   Oct10   0:00 /bin/bash ./run.sh collector-json-1.conf
elastic   234899 48.7  7.1 10087120 4433104 pts/2 Sl+ Oct10 2804:11 /usr/java/jdk1.7.0_09_x64/bin/java -Xmx6144m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatin
:

w porównaniu do

$ ps -u $USER
    PID TTY          TIME CMD
 234897 pts/2    00:00:00 run.sh
 234899 pts/2    1-22:44:04 java
:
  1. Ale dlaczego jest to „zła składnia”? /usr/share/doc/procps-3.2.8/FAQniewiele pomaga.
  2. Jaka byłaby „właściwa składnia”, aby osiągnąć dokładnie to samo wyjście?

W przypadku, gdy jest to ważne:

$ uname -a
Linux h22k34.local 2.6.32-042stab044.17 #1 SMP Fri Jan 13 12:53:58 MSK 2012 x86_64 x86_64 x86_64 GNU/Linux
sjngm
źródło
5
A teraz najtrudniejsza część: która odpowiedź powinna otrzymać znacznik wyboru?
sjngm
Właściwie pomyślałem, że powinienem pozwolić tobie, użytkownikom, zdecydować. Ten, który ma wyższe głosy poparcia, powinien go otrzymać. Ale nie ułatwisz tego;)
sjngm
6
gdy obie odpowiedzi są równie dobre, głosuję za nimi obie i daję znak zaznaczenia użytkownikowi z niższym powtórzeniem, szczególnie gdy różnica jest większa niż 100 tys.
Frank Thomas
1
@FrankThomas done :)
sjngm
W systemach opartych na SysV (lub tych, które pswywodzą się z tej linii rzeczy), często używam ps -fu $USER... pobierania ps -fformatowania wyjściowego, który jest nieco podobny do ps uformatowania, ale jednocześnie otrzymuję opcję określania użytkownika. Na wypadek, gdybyś chciał oba jednocześnie.
lindes-hw

Odpowiedzi:

130

Prawidłowa składnia, która zwraca to samo wyjście , to:

ps u

Jest dobry powód, dla którego nowoczesna składnia psjest bałaganem. Historycznie istniały dwie niekompatybilne wersje ps. Opcje z wiodącym myślnikiem zostały odziedziczone po wersji AT&T Unix ps. Opcje bez wiodącej kreski zostały odziedziczone po BSD. Wersja pstej dystrybucji Linuksa zazwyczaj używa GNU, która połączyła oba zestawy opcji razem, a także dodała własny zestaw opcji, które zaczynają się od wiodącego podwójnego myślnika.

Zatem ps ujest w stylu BSD i ps -u $USERAT i T. Fakt, że GNU pspozwala na uruchomienie ps -ui, poza ostrzeżeniem, uzyskuje takie same wyniki, jak ps upokazuje, że GNU próbuje jak najlepiej wykorzystać złą sytuację.

John1024
źródło
W rzeczywistości nie ma dobrego powodu do bałaganu. Istnieje kilka złych, a rzekoma dychotomia „GNU” i „BSD” jest błędem zaproponowanym przez stronę podręcznika systemu Linux. Zobacz unix.stackexchange.com/a/511530/5132 .
JdeBP
84

psKomenda historycznie miał dziko innej składni w BSD i System V Unix.

  • W BSDps The uopcja (bez kreska) nie bierze parametr i pokazuje „wyjście” zorientowanych na użytkownika z dodatkowymi kolumnami.

  • W SunOSps The -uopcja (z myślnikiem) przyjmuje jako parametr nazwę użytkownika i obejmuje tylko procesy będące własnością tego użytkownika, ale bez zmiany formatu wyświetlania.

(Jako kolejny bardzo powszechny przykład BSD eoznacza „pokaż środowisko”, podczas gdy SunOS -eoznacza „pokaż wszystkim procesy”.)

Linux procps ps próbuje obsługiwać oba style. Jeśli więc użyjesz opcji „myślnik” -u, będzie ona oczekiwała, że ​​będzie to opcja filtrowania tego użytkownika przez SunOS, a nie opcja rozszerzonych kolumn. Oba są wystarczająco często zdezorientowane, że procps próbuje zrobić to, co chcesz - jeśli brakuje nazwy użytkownika, założymy, że dałeś jej opcję BSD, ale użyłeś składni SunOS.

(W rzeczywistości istniało tak wiele różnych wariantów tego, psże procps ma rzeczywistą tabelę „osobowości”, aby zmusić dwuznaczne zachowanie do interpretacji jako taki czy inny styl lub jeszcze inny - oprócz gałek takich jak „UNIX95”, „CMD_ENV”, „_XPG”, „I_WANT_A_BROKEN_PS” ...)

grawitacja
źródło
29
„I_WANT_A_BROKEN_PS” hah.
42
... Na początku myślałem, że to żart. Ale nieeeee ...
Izkata
9
Hmm, jak się okazuje, jest to dokładnie opcja ukrywania „niejednoznacznego użycia” ostrzeżeń, które widzi OP.
grawitacja