IMHO ps -u
zeigt eine sehr nützliche Ausgabe, viel besser als 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
:
verglichen mit
$ ps -u $USER
PID TTY TIME CMD
234897 pts/2 00:00:00 run.sh
234899 pts/2 1-22:44:04 java
:
- Aber warum ist es "schlechte Syntax"?
/usr/share/doc/procps-3.2.8/FAQ
hilft nicht viel - Was wäre eine "richtige Syntax", um genau die gleiche Ausgabe zu erzielen?
Falls es wichtig ist:
$ 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
die aus dieser Reihe von Dingen stammen) verwende ich häufigps -fu $USER
... um eineps -f
Ausgabeformatierung zu erhalten, die der Formatierung etwas ähnlich istps u
, aber auch die Sache mit der Benutzerspezifikation. Für den Fall, Sie wollten beide gleichzeitig.Antworten:
Die korrekte Syntax, die dieselbe Ausgabe zurückgibt , wäre:
Es gibt einen guten Grund, warum die moderne Syntax für
ps
ein Chaos ist. Historisch gesehen gab es zwei inkompatible Versionen vonps
. Optionen mit einem führenden Gedankenstrich wurden von der AT & T Unix-Version von geerbtps
. Optionen ohne führenden Gedankenstrich wurden von BSD geerbt. Die Versionps
dieser Linux-Distributionen, die im Allgemeinen verwendet wird, ist GNU, das beide Optionssätze zusammengeführt und eigene Optionssätze hinzugefügt hat, die mit einem führenden Doppelstrich beginnen.So
ps u
ist BSD-Stil undps -u $USER
ist AT & T-Stil. Die Tatsache,ps
dass Sie mit GNU ausführenps -u
und abgesehen von der Warnung die gleiche Ausgabe erhalten können,ps u
zeigt, dass GNU versucht, das Beste aus einer schlechten Situation zu machen.quelle
Der
ps
Befehl hatte historisch gesehen eine völlig andere Syntax in BSD und System V Unix.In BSD
ps
nimmt dieu
Option (kein Bindestrich) keinen Parameter und zeigt die "benutzerorientierte Ausgabe" mit den zusätzlichen Spalten an.In SunOS
ps
-u
übernimmt die Option (mit Bindestrich) einen Benutzernamen als Parameter und schließt nur Prozesse ein, die diesem Benutzer gehören, ohne jedoch das Anzeigeformat zu ändern.(Als weiteres sehr verbreitetes Beispiel
e
bedeutet BSD "Umgebung anzeigen", während SunOS-e
"alle Prozesse anzeigen " bedeutet.)Linux procps
ps
versucht beide Stile zu unterstützen. Wenn Sie also die Option 'dash' verwenden-u
, wird erwartet, dass es sich um die SunOS-Option "Diesen Benutzer filtern" handelt, nicht um die Option für erweiterte Spalten. Die beiden häufig genug verwirrt sind jedoch, dass procps versucht zu tun , was Sie Meant - wenn der Benutzername fehlt, es wird vorausgesetzt , dass Sie es ein BSD - Option gab aber verwendet SunOS Syntax.(Es gab in der Tat so viele verschiedene Varianten,
ps
dass der Procps eine tatsächliche Tabelle von "Persönlichkeiten" hat, um zu erzwingen, dass mehrdeutiges Verhalten als der eine oder andere Stil interpretiert wird - zusätzlich zu Knöpfen wie "UNIX95", "CMD_ENV", "_XPG", "I_WANT_A_BROKEN_PS" ...)quelle