"Ps -u" é realmente uma sintaxe ruim?

75

O IMHO ps -umostra 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
:
  1. Mas, por que é "má sintaxe"? /usr/share/doc/procps-3.2.8/FAQnão ajuda muito.
  2. 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
sjngm
fonte
5
E agora a parte difícil: qual resposta deve receber a marca de seleção?
sjngm
Na verdade, pensei que deveria deixar vocês, os usuários, decidirem. Aquele com votos mais altos deve obtê-lo. Mas, você não está fazendo isso mais fácil;)
sjngm
6
quando ambas as respostas são igualmente boas, eu voto duas e dou a marca de seleção ao usuário com o menor representante, especialmente quando a diferença é superior a 100k.
9788 Frank Thomas Thomas
1
@FrankThomas done :)
sjngm
Em sistemas baseados em SysV (ou aqueles que psprovém dessa linha de coisas), eu freqüentemente uso ps -fu $USER... obtendo ps -fformatação de saída que é um pouco semelhante à ps uformatação, mas também obtendo a especificação de usuário. Caso você queira os dois ao mesmo tempo.
Lindes-hw 15/10

Respostas:

130

A sintaxe correta, que retorna a mesma saída , seria:

ps u

Há uma boa razão pela qual a sintaxe moderna de psé uma bagunça. Historicamente, havia duas versões incompatíveis do ps. As opções com um traço principal foram herdadas da versão AT&T Unix de ps. Opções sem um traço à esquerda foram herdadas do BSD. A versão psque 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 estilo ps -u $USERAT&T. O fato de o GNU pspermitir que você execute ps -ue, além do aviso, obtenha a mesma saída que ps umostra que o GNU está tentando tirar o melhor de uma situação ruim.

John1024
fonte
Na verdade, não há uma boa razão para a bagunça. Existem vários problemas, e a suposta dicotomia "GNU" e "BSD" é uma falácia proposta pela página de manual do Linux. Consulte unix.stackexchange.com/a/511530/5132 .
JdeBP 9/04
84

O pscomando historicamente tinha uma sintaxe totalmente diferente no BSD e no System V Unix.

  • No BSDps , a uopção (sem traço) não aceita parâmetros e mostra a "saída orientada ao usuário" com as colunas adicionais.

  • No SunOSps , a -uopçã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 esignifica "mostrar ambiente", enquanto SunOS -esignifica "mostrar os processos de todos".)

O procps do Linuxps 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 psque 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" ...)

gravidade
fonte
29
"I_WANT_A_BROKEN_PS" hah.
42
... No começo, eu pensei que era uma piada. Mas nooooo ...
Izkata
9
Hmm, como se vê, esta é exatamente a opção de ocultar o "uso ambíguo" dos avisos que o OP está vendo.
grawity