IMHO ps -u
affiche un résultat très utile, bien meilleur que 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
:
par rapport à
$ ps -u $USER
PID TTY TIME CMD
234897 pts/2 00:00:00 run.sh
234899 pts/2 1-22:44:04 java
:
- Mais pourquoi est-ce une "mauvaise syntaxe"?
/usr/share/doc/procps-3.2.8/FAQ
n'aide pas beaucoup. - Quelle serait une "syntaxe correcte" pour obtenir exactement le même résultat?
Si c'est important:
$ 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
proviennent de cette catégorie d’activités), j’utilise fréquemmentps -fu $USER
... leps -f
formatage en sortie qui est un peu similaire aups u
formatage, tout en obtenant également le paramètre spécifier-un-utilisateur. Au cas où vous vouliez les deux en même temps.Réponses:
La syntaxe correcte, qui renvoie le même résultat , serait la suivante:
Il y a une bonne raison pour laquelle la syntaxe moderne
ps
est un désordre. Historiquement, il existait deux versions incompatibles deps
. Les options avec un tiret principal ont été héritées de la version AT & T Unix deps
. Les options sans tiret principal ont été héritées de BSD. La versionps
généralement utilisée par les distributions Linux est GNU, qui a fusionné les deux jeux d’options et ajouté son propre jeu d’options commençant par un double tiret.Ainsi,
ps u
style BSD et styleps -u $USER
AT & T. Le fait que GNUps
vous permette d’exécuterps -u
et, en plus de l’avertissement, d’obtenir le même résultatps u
, ce qui montre que GNU tente de tirer le meilleur parti d’une mauvaise situation.la source
La
ps
commande avait historiquement une syntaxe très différente dans BSD et System V Unix.Dans BSD
ps
, l'u
option (pas de tiret) ne prend aucun paramètre et affiche la "sortie orientée utilisateur" avec les colonnes supplémentaires.Dans SunOS
ps
, l'-u
option (avec tiret) prend un nom d'utilisateur en tant que paramètre et n'inclut que les processus appartenant à cet utilisateur, mais sans changer le format d'affichage.(Comme autre exemple très courant, BSD
e
signifie "show environment", tandis que SunOS-e
signifie "affichez les processus de tout le monde".)Linux procps
ps
essaie de supporter les deux styles. Donc, si vous utilisez l'option "tiret"-u
, vous vous attendez à ce qu'elle soit l'option "filtrer cet utilisateur" de SunOS, pas l'option à colonnes étendues. Cependant, procps essaie de faire ce que vous vouliez dire - si le nom d'utilisateur est manquant, cela suppose que vous lui avez donné une option BSD mais que vous avez utilisé la syntaxe SunOS.(Il y avait en fait tellement de variantes différentes
ps
que le procps dispose d'un tableau réel de "personnalités" pour forcer un comportement ambigu à être interprété comme un style ou un autre encore - en plus des boutons comme "UNIX95", "CMD_ENV", "_XPG", "I_WANT_A_BROKEN_PS" ...)la source