En mi humilde opinión ps -u
muestra una salida muy útil, mucho mejor 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
:
comparado con
$ ps -u $USER
PID TTY TIME CMD
234897 pts/2 00:00:00 run.sh
234899 pts/2 1-22:44:04 java
:
- Pero, ¿por qué es "mala sintaxis"?
/usr/share/doc/procps-3.2.8/FAQ
no ayuda mucho - ¿Cuál sería una "sintaxis adecuada" para lograr exactamente la misma salida?
En caso de que sea importante:
$ 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
provienen de esa línea de cosas), con frecuencia usops -fu $USER
... obtenerps -f
el formato de salida que es algo similar alps u
formato, pero también obtengo lo de especificar un usuario. En caso de que quisieras ambos al mismo tiempo.Respuestas:
La sintaxis correcta, que devuelve la misma salida , sería:
Hay una buena razón por la cual la sintaxis moderna
ps
es un desastre. Históricamente, había dos versiones incompatibles deps
. Las opciones con un guión principal se heredaron de la versión AT&T Unix deps
. Las opciones sin un guión inicial se heredaron de BSD. La versión deps
las distribuciones de Linux que generalmente se usa es GNU, que ha combinado ambos conjuntos de opciones, además de haber agregado su propio conjunto de opciones que comienzan con un doble guión inicial.Por lo tanto,
ps u
es de estilo BSD yps -u $USER
es de estilo AT&T. El hecho de que GNU leps
permite ejecutarps -u
y, además de la advertencia, obtener el mismo resultado queps u
muestra que GNU está tratando de sacar lo mejor de una mala situación.fuente
El
ps
comando históricamente tenía una sintaxis muy diferente en BSD y System V Unix.En BSD
ps
, lau
opción (sin guión) no toma ningún parámetro y muestra la "salida orientada al usuario" con las columnas adicionales.En SunOS
ps
, la-u
opción (con guión) toma un nombre de usuario como parámetro y solo incluye procesos propiedad de ese usuario, pero sin cambiar el formato de visualización.(Como otro ejemplo muy común, BSD
e
significa "mostrar entorno", mientras que SunOS-e
significa "mostrar los procesos de todos").Procps de Linux
ps
intenta admitir ambos estilos. Entonces, si usa la opción 'guión'-u
, esperará que sea la opción "filtrar a este usuario" de SunOS, no la opción de columnas extendidas. Sin embargo, los dos se confunden con bastante frecuencia, por lo que procps intenta hacer lo que usted quiso: si falta el nombre de usuario, supondrá que le dio una opción BSD pero usó la sintaxis de SunOS.(De hecho, había tantas variantes diferentes
ps
que el procps tiene una tabla real de "personalidades" para forzar que el comportamiento ambiguo se interprete como un estilo u otro u otro - además de botones como "UNIX95", "CMD_ENV", "_XPG", "I_WANT_A_BROKEN_PS" ...)fuente