ps -ef 和 ps aux 在 macOS 或 Linux 中有什么区别?

What are the differences between ps -ef and ps aux in macOS or in Linux?

当使用 ps 时,$ ps -ef$ ps aux 似乎给出相同的结果。 有什么区别?

我发现了什么

我使用 man ps 查找了手册,得到了 -e-f 的答案。但我没有看到 aux — 我在 man ps 下使用了 /aux 搜索,但返回的都是一些与 Max OS X Tiger 相关的遗留通知,而我在macOS 高山脉:

LEGACY DESCRIPTION The biggest change is in the interpretation of the -u option, which now displays processes belonging to the specified username(s). Thus, "ps -aux" will fail (unless you want to know about user "x"). As a convenience, however, "ps aux" still works as it did in Tiger. (March 20, 2005)

那么,ps -efps aux有什么区别呢?谢谢!

有些选项相同,有些接近。基本上 aux 是 BSD 风格而 -ef 是 UNIX 风格。从 Linux 手册页的第一部分(我假设 OSX 版本具有支持这两种类型的类似推理):

   This version of ps accepts several kinds of options:

   1   UNIX options, which may be grouped and must be preceded by a dash.
   2   BSD options, which may be grouped and must not be used with a dash.
   3   GNU long options, which are preceded by two dashes.

有关 -efaux 的详细信息在手册页中。我只是想澄清您可能对为什么它们都受支持感到困惑。

linux 手册页还详细说明了使用 BSD 选项时的一些一致差异。这对于 MacOS 可能是也可能不是,所以我不会 link 它。

有一小部分命令行工具已经存在了很长时间并且经常使用,足以让他们为了方便而开始丢失and/or从来没有正式的- 旗帜。 tarps 是两个很好的例子。

为什么要使用 aux 而不是 eff 标志显示进程系列并将它们更好地组合在一起。 aux 是几十年前系统的悠久传统,即使它是非标准的,也有望发挥作用。

从历史上看,macOS 起源于 BSD,因此 ps 的论点更类似于 FreeBSD。 GNU/Linux 继承自 AT&T UNIX (System V),它具有类似的工具,但以不同的方式发展。这两个世界之间有很多重叠,许多工具从一个世界跳到另一个世界,但是仍然有一些历史原因导致一些论点不同。

请记住 ps 不是“bash 东西”,它是一个系统命令,可以与 bash 以及其他 shell 一起使用,或者直接调用时根本没有 shell 。尽量不要将 shell 提供的命令行环境(如 bash)与捆绑为操作系统一部分的 POSIX/UNIX 工具套件(如 ps)混淆。