ps -aux 和 ps aux 的区别

ps -auxps aux之间有什么区别?我想知道这不仅仅是语法和“可移植性”的问题。在Ubuntu中,哪个更好用?

尽管有一些类似的问题,但我对这个具体的区别很感兴趣。


1@muru 好奇怪啊 :D 我回答了那个问题。完全忘记了那个。但我们两个都得到了17个赞,我在这个问题上也得到了17个赞。一定是同样的17个人 >:-D - Rinzwind
@Rinzwind 谁知道呢...顺便说一下,看起来你打错了:你是不是想说“请使用ps aux”?毕竟,ps -aux的输出取决于是否存在一个名为x的用户。 - muru
@muru 哎呀,我自己都搞糊涂了 >:-D - Rinzwind
@Rinzwind 对不起,但我仍然不明白为什么你要使用ps aux,那是BSD的风格。 - floatingpurr
因为Debian做得正确;-) - Rinzwind
好的,相当奇怪的情况... - floatingpurr
1@floatingpurr 因为-aux版本将根据用户'x'的存在与否而失败/表现不同。使用破折号语法,ps -ef 是正确的等效方式。 - mbrig
1个回答

BSD和AT&T开发了不兼容的ps版本。没有前导破折号的选项是BSD风格,而有前导破折号的选项是AT&T Unix风格。 ps man page也提到了这一点:
引用: 请注意,“ps -aux”与“ps aux”是不同的。POSIX和UNIX标准要求“ps -aux”打印所有属于名为“x”的用户的进程,以及打印由-a选项选择的所有进程。如果名为“x”的用户不存在,此“ps”可能会将命令解释为“ps aux”,并打印警告。此行为旨在帮助过渡旧脚本和习惯。它是脆弱的,可能会发生变化,因此不应依赖于它。
Linux选择支持两种方式。如果提供一个不存在的用户,ps -au{user}将报错。参见:
$ ps -autest
error: user name does not exist

Usage:
 ps [options]

 Try 'ps --help <simple|list|output|threads|misc|all>'
  or 'ps --help <s|l|o|t|m|a>'
 for additional help text.

For more details see ps(1).

Ubuntu/Canonical选择显示一个错误。 Debian选择给ps -auxps aux输出相同的结果。总而言之,相当令人困惑。但正如所述:这是/曾是为了使脚本兼容。你可以使用你感到满意的方法。

1所以我可以使用 ps -aux,但如果用户 x 不存在,它会回退到完全不同的意义上去吗?这比仅仅显示错误更加令人困惑。他们应该强制选择使用 BSD 或 Unix 的定义,根据错误情况(不存在的用户)在选项定义之间进行条件切换对我来说似乎是疯狂的。似乎不应推荐使用 ps -aux。对于像我这样感到困惑并希望坚持使用 Unix 选项的人来说,ps -eF 提供的信息几乎与 ps aux 相同(提供进程大小而不是虚拟大小)。 - theferrit32
3那应该是“请不要使用ps -aux”吧?还是你的意思是试一试看会发生什么? - mbrig
那么,判决是什么? - floatingpurr