"Ps -u" è davvero una sintassi errata?


75

IMHO ps -umostra un output molto utile, molto meglio di 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
:

rispetto a

$ ps -u $USER
    PID TTY          TIME CMD
 234897 pts/2    00:00:00 run.sh
 234899 pts/2    1-22:44:04 java
:
  1. Ma perché è "sintassi errata"? /usr/share/doc/procps-3.2.8/FAQnon aiuta molto.
  2. Quale sarebbe una "sintassi corretta" per ottenere lo stesso output esatto?

Nel caso sia 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

5
E ora per la parte difficile: quale risposta dovrebbe ottenere il segno di spunta?
sjngm,

In realtà, ho pensato che avrei dovuto decidere voi, gli utenti. Quello con i voti più alti dovrebbe ottenerlo. Ma non lo stai rendendo più facile;)
sjngm,

6
quando entrambe le risposte sono ugualmente buone, voto entrambe e do il segno di spunta all'utente con un rappresentante più basso, specialmente quando la differenza è superiore a 100k.
Frank Thomas,

1
@FrankThomas done :)
sjngm

Sui sistemi basati su SysV (o su quelli che psprovengono da quella linea di cose), uso spesso ps -fu $USER... ottenere ps -funa formattazione dell'output che è in qualche modo simile alla ps uformattazione, ma anche ottenere la cosa specifica-un-utente. Nel caso in cui volessi entrambi allo stesso tempo.
Lindes-hw,

Risposte:


130

La sintassi corretta, che restituisce lo stesso output , sarebbe:

ps u

C'è una buona ragione per cui la sintassi moderna per psè un casino. Storicamente, c'erano due versioni incompatibili di ps. Le opzioni con trattino iniziale sono state ereditate dalla versione Unix di AT&T ps. Le opzioni senza trattino iniziale sono state ereditate da BSD. La versione di psquelle distribuzioni Linux generalmente utilizza è GNU che ha unito entrambi i set di opzioni, oltre ad aver aggiunto il proprio set di opzioni che iniziano con un doppio trattino iniziale.

Pertanto, ps uè in stile BSD ed ps -u $USERè in stile AT e T. Il fatto che GNU psti permetta di funzionare ps -ue, oltre all'avviso, ottenga lo stesso output che ps umostra che GNU sta tentando di trarre il meglio da una brutta situazione.


In realtà, non c'è una buona ragione per il pasticcio. Ce ne sono molti di cattivi e la presunta dicotomia di "GNU" e "BSD" è un errore proposto da una pagina di manuale di Linux. Vedi unix.stackexchange.com/a/511530/5132 .
JdeBP

84

Il pscomando ha storicamente sintassi molto diversi in BSD e System V Unix.

  • In BSDps , l' uopzione (senza trattino) non accetta alcun parametro e mostra "output orientato all'utente" con le colonne aggiuntive.

  • In SunOSps , l' -uopzione (con trattino) accetta un nome utente come parametro e include solo i processi di proprietà di quell'utente, ma senza modificare il formato di visualizzazione.

(Come altro esempio molto comune, BSD esignifica "mostra l'ambiente", mentre SunOS -esignifica "mostra i processi di tutti".)

Procps Linuxps tenta di supportare entrambi gli stili. Pertanto, se si utilizza l'opzione "trattino" -u, ci si aspetta che sia l'opzione "filtra questo utente" di SunOS, non l'opzione di colonne estese. I due sono confusi abbastanza frequentemente, tuttavia, che procps tenta di fare ciò che volevi dire - se manca il nome utente, si presuppone che tu gli abbia dato un'opzione BSD ma hai usato la sintassi SunOS.

(C'erano in effetti così tante varianti diverse psche il procps ha una tabella reale di "personalità" per forzare il comportamento ambiguo ad essere interpretato come uno stile o un altro o ancora un altro - oltre a manopole come "UNIX95", "CMD_ENV", "_XPG", "I_WANT_A_BROKEN_PS" ...)


29
"I_WANT_A_BROKEN_PS" hah.

42
... All'inizio, ho pensato che fosse uno scherzo. Ma nooooo ...
Izkata,

9
Hmm, a quanto pare, questa è esattamente l'opzione per nascondere l '"uso ambiguo" degli avvisi che OP sta vedendo.
Grawity,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.