“ps -u”真的是一个糟糕的语法吗?


75

恕我直言 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

阐明答案。谢谢你的询问!
Frank Thomas

5
现在,对于困难的部分:哪个答案应该得到复选标记?
sjngm

实际上我认为我应该让你,用户,决定。具有较高upvotes的那个应该得到它。但是,你并没有让这更容易;)
sjngm

6
当两个答案都同样好的时候,我同时支持两者,并给具有较低代表的用户勾选标记,特别是当差异超过100k时。
Frank Thomas

1
@FrankThomas完成了:)
sjngm

Answers:


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正试图充分利用糟糕的情况。


84

ps 历史上,命令在BSD和System V Unix中具有完全不同的语法。

  • BSD psu 选项(无破折号)不带参数,并显示带有附加列的“面向用户的输出”。

  • 在SunOS ps-u option(带破折号)将用户名作为参数,仅包含该用户拥有的进程,但不更改显示格式。

(作为另一个非常常见的例子,BSD e 表示“展示环境”,而SunOS -e 意思是“展示每个人的过程”。)

Linux的 procps的 ps 试图支持这两种风格。因此,如果您使用'破折号'选项 -u,它会期望它是SunOS“过滤此用户”选项, 扩展列选项。然而,两者经常混淆不清 procps的 尝试做你想做的事 - 如果缺少用户名,它会假设你给了它一个BSD选项但是使用了SunOS语法。

(实际上有很多不同的变体 ps 那个 procps的 有一个实际的“个性”表,以强制模糊行为被解释为一种风格或另一种风格或另一种风格 - 此外 像“UNIX95”,“CMD_ENV”,“_ XXX”,“I_WANT_A_BROKEN_PS”这样的旋钮...)


29
“I_WANT_A_BROKEN_PS”哈。

42
......起初,我认为这是一个笑话。 但是没有......
Izkata

9
嗯,事实证明,这正是隐藏OP所看到的警告“含糊不清”的选项。
grawity
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.