O IMHO ps -u
mostra uma saída muito útil, muito melhor 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 com
$ ps -u $USER
PID TTY TIME CMD
234897 pts/2 00:00:00 run.sh
234899 pts/2 1-22:44:04 java
:
- Mas, por que é "má sintaxe"?
/usr/share/doc/procps-3.2.8/FAQ
não ajuda muito. - O que seria uma "sintaxe adequada" para obter exatamente a mesma saída?
Caso seja 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
provém dessa linha de coisas), eu freqüentemente usops -fu $USER
... obtendops -f
formatação de saída que é um pouco semelhante àps u
formatação, mas também obtendo a especificação de usuário. Caso você queira os dois ao mesmo tempo.Respostas:
A sintaxe correta, que retorna a mesma saída , seria:
Há uma boa razão pela qual a sintaxe moderna de
ps
é uma bagunça. Historicamente, havia duas versões incompatíveis dops
. As opções com um traço principal foram herdadas da versão AT&T Unix deps
. Opções sem um traço à esquerda foram herdadas do BSD. A versãops
que as distribuições Linux geralmente usam é o GNU, que mesclou os dois conjuntos de opções, além de adicionar seu próprio conjunto de opções, que começam com um duplo traço.Assim,
ps u
é estilo BSD e estilops -u $USER
AT&T. O fato de o GNUps
permitir que você executeps -u
e, além do aviso, obtenha a mesma saída queps u
mostra que o GNU está tentando tirar o melhor de uma situação ruim.fonte
O
ps
comando historicamente tinha uma sintaxe totalmente diferente no BSD e no System V Unix.No BSD
ps
, au
opção (sem traço) não aceita parâmetros e mostra a "saída orientada ao usuário" com as colunas adicionais.No SunOS
ps
, a-u
opção (com traço) usa um nome de usuário como parâmetro e inclui apenas processos pertencentes a esse usuário, mas sem alterar o formato de exibição.(Como outro exemplo muito comum, BSD
e
significa "mostrar ambiente", enquanto SunOS-e
significa "mostrar os processos de todos".)O procps do Linux
ps
tenta suportar os dois estilos. Portanto, se você usar a opção 'dash'-u
, espera-se que seja a opção "filtrar este usuário" do SunOS, não a opção de colunas estendidas. Os dois são confusos com bastante frequência, no entanto, que procps tenta fazer o que você quis dizer - se o nome de usuário estiver ausente, ele assumirá que você deu uma opção de BSD, mas usou a sintaxe do SunOS.(De fato, havia tantas variantes diferentes
ps
que o procps possui uma tabela real de "personalidades" para forçar o comportamento ambíguo a ser interpretado como um estilo ou outro ou ainda outro - além de botões como "UNIX95", "CMD_ENV", "_XPG", "I_WANT_A_BROKEN_PS" ...)fonte