IMHO ps -u
pokazuje 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
:
- Ale dlaczego jest to „zła składnia”?
/usr/share/doc/procps-3.2.8/FAQ
niewiele pomaga. - 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
ps
wywodzą się z tej linii rzeczy), często używamps -fu $USER
... pobieraniaps -f
formatowania wyjściowego, który jest nieco podobny dops u
formatowania, ale jednocześnie otrzymuję opcję określania użytkownika. Na wypadek, gdybyś chciał oba jednocześnie.Odpowiedzi:
Prawidłowa składnia, która zwraca to samo wyjście , to:
Jest dobry powód, dla którego nowoczesna składnia
ps
jest bałaganem. Historycznie istniały dwie niekompatybilne wersjeps
. Opcje z wiodącym myślnikiem zostały odziedziczone po wersji AT&T Unixps
. Opcje bez wiodącej kreski zostały odziedziczone po BSD. Wersjaps
tej 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 u
jest w stylu BSD ips -u $USER
AT i T. Fakt, że GNUps
pozwala na uruchomienieps -u
i, poza ostrzeżeniem, uzyskuje takie same wyniki, jakps u
pokazuje, że GNU próbuje jak najlepiej wykorzystać złą sytuację.źródło
ps
Komenda historycznie miał dziko innej składni w BSD i System V Unix.W BSD
ps
Theu
opcja (bez kreska) nie bierze parametr i pokazuje „wyjście” zorientowanych na użytkownika z dodatkowymi kolumnami.W SunOS
ps
The-u
opcja (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
e
oznacza „pokaż środowisko”, podczas gdy SunOS-e
oznacza „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” ...)źródło