IMHO ps -u
affiche une sortie très utile, bien meilleure 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
:
/usr/share/doc/procps-3.2.8/FAQ
n'aide pas beaucoup.Dans le cas où 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
La syntaxe correcte qui renvoie le même résultat serait:
ps u
Il y a une bonne raison pour laquelle la syntaxe moderne pour ps
est un gâchis. Historiquement, il existait deux versions incompatibles de ps
. Les options avec un tiret principal ont été héritées de la version Unix d'AT & T de ps
. Les options sans tiret principal ont été héritées de BSD. La version de ps
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
est de style BSD et ps -u $USER
de style AT & T. Le fait que GNU ps
vous permette d’exécuter ps -u
et, à l’exception de l’avertissement, d'obtenir le même résultat que ps u
montre que GNU tente de tirer le meilleur parti d’une mauvaise situation.
La commande ps
avait historiquement une syntaxe très différente dans BSD et System V Unix.
Dans BSD ps
, l'option u
(aucun tiret) ne prend aucun paramètre et affiche la "sortie orientée utilisateur" avec les colonnes supplémentaires.
Dans SunOS ps
, l'option -u
(avec un tiret) prend un nom d'utilisateur en tant que paramètre et n'inclut que les processus détenus par cet utilisateur, mais sans changer le format d'affichage.
(Comme autre exemple très courant, BSD e
signifie "show environment", alors que SunOS -e
signifie "affiche les processus de tout le monde".)
Linux procps ps
essaie de prendre en charge les deux styles. Donc, si vous utilisez l'option 'tiret' -u
, vous vous attendez à ce qu'elle soit l'option "Filtrez cet utilisateur" de SunOS, et non à l'option des colonnes étendues. Les deux confondent assez souvent cependant que 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 de ps
que le procps possède un tableau réel de "personnalités" pour forcer un comportement ambigu à être interprété comme un style ou un autre ou encore un autre - en plus de boutons tels que "UNIX95", "CMD_ENV", "_XPG", "I_WANT_A_BROKEN_PS" ...)