Чи "ps -u" справді поганий синтаксис?


75

IMHO ps -uпоказує дуже корисний результат, набагато краще, ніж 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
:

у порівнянні з

$ ps -u $USER
    PID TTY          TIME CMD
 234897 pts/2    00:00:00 run.sh
 234899 pts/2    1-22:44:04 java
:
  1. Але, чому це "поганий синтаксис"? /usr/share/doc/procps-3.2.8/FAQне дуже допомагає.
  2. Що було б "правильним синтаксисом" для досягнення такого ж результату?

У випадку, якщо це важливо:

$ 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
А тепер про складну частину: Яку відповідь має отримати галочка?
sjngm

Насправді я думав, що я повинен дозволити вам, користувачам, вирішити. Той, хто має більш високі результати, повинен отримати це. Але вам це не полегшується;)
sjngm

6
коли обидві відповіді однаково хороші, я підтверджую обидва і даю галочку користувачеві з нижньою кількістю представників, особливо коли різниця перевищує 100 к.
Френк Томас

1
@FrankThomas done :)
sjngm

У системах, що базуються на SysV (або тих, які psпоходять з цієї лінії речей), я часто використовую ps -fu $USER... отримую ps -fвихідне форматування, яке дещо схоже на ps uформатування, але також отримую річ із зазначенням користувача. Якщо ви хотіли обох одночасно.
lindes-hw

Відповіді:


130

Правильним синтаксисом, який повертає той самий результат , буде:

ps u

Є вагома причина, чому сучасний синтаксис ps- це безлад. Історично склалося дві несумісні версії ps. Опції з провідним тирем успадковані від AT&T Unix версії ps. Варіанти без провідного тире успадковані від BSD. Версія psцього дистрибутива Linux, як правило, використовує GNU, який об'єднав обидва набори опцій разом, а також додав власний набір опцій, що починаються з провідного подвійного тире.

Таким чином, ps uє BSD-стилем і ps -u $USERє AT & T-стилем. Той факт, що GNU psдозволяє вам запускати ps -uта, окрім попередження, отримувати такий самий результат, що ps uсвідчить про те, що GNU намагається використати якнайкраще погану ситуацію.


Насправді, для того, що є безлад, немає вагомих причин. Існує декілька поганих, і нібито дихотомія "GNU" та "BSD" - це помилка, поширювана на сторінці керівництва Linux. Див. Unix.stackexchange.com/a/511530/5132 .
JdeBP

84

psКоманда історично була дико інший синтаксис в BSD і System V Unix.

  • У BSDps , то uпараметр (без тиру) не приймає параметра і показує «орієнтовані на користувач вихід» з додатковими колонами.

  • У SunOSps , то -uваріант (з тире) приймає ім'я користувача в якості параметра , і тільки включає в себе процеси , що належать цьому користувачу, але без зміни формату відображення.

(Як ще один дуже поширений приклад, BSD eозначає "показати середовище", тоді як SunOS -eозначає "показати всі процеси".)

Linux propps ps намагається підтримувати обидва стилі. Отже, якщо ви використовуєте опцію 'тире' -u, то очікується, що це буде опція SunOS «фільтрувати цього користувача», а не розширена колонка. Ці два плутаються досить часто, проте прокси намагаються зробити те, що ви маєте на увазі - якщо ім'я користувача відсутнє, ви вважаєте, що ви дали йому BSD варіант, але використовували синтаксис SunOS.

(Насправді було так багато різних варіантів того, psщо у props є фактична таблиця "особистостей", щоб змусити неоднозначну поведінку інтерпретувати як той чи інший стиль чи ще один - на додаток до ручок типу "UNIX95", "CMD_ENV", "_XPG", "I_WANT_A_BROKEN_PS" ...)


29
"I_WANT_A_BROKEN_PS" га.

42
... Спочатку я подумав, що це жарт. Але nooooo ...
Ізката

9
Хм, як виявляється, саме такий варіант приховує "неоднозначне використання" попереджень, які бачить ОП.
grawity
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.