“ps aux”中的 aux 是什么意思?

“ps aux”中的 aux 是什么意思?

ps aux似乎可以方便地列出所有进程及其状态和资源使用情况(Linux/BSD/MacOS),但是我无法理解aux使用man ps.

这是什么aux意思?

答案1

a = 显示所有用户的进程
u = 显示进程的用户/所有者
x = 还显示未连接到终端的进程

顺便说一句,man ps是一个很好的资源。

从历史上看,BSD 和 AT&T 开发了不兼容的ps.没有前导破折号的选项(根据问题)是 BSD 风格,而带有前导破折号的选项是 AT&T Unix 风格。除此之外,Linux 开发了一个支持这两种样式的版本,然后添加了第三种样式,其选项以双破折号开头。

所有(或几乎所有)非嵌入式 Linux 发行版都使用过程套房。上述选项的定义如下过程ps手册页

在评论中,您说您正在使用 Apple MacOS(我猜是 OSX)。 OSX 手册页ps这里并且它显示仅支持 AT&T 风格。

答案2

man ps这些选项的描述如下:

   a      Lift the BSD-style "only yourself" restriction, which is imposed 
          upon the set of all processes when some BSD-style (without "-") 
          options are used or when the ps personality setting is BSD-like.  
          The set of processes selected in this manner is in addition to the 
          set of processes selected by other means.  An alternate 
          description is that this option causes ps to list all processes 
          with a terminal (tty), or to list all processes when used together 
          with the x option.

   u      Display user-oriented format.

   x      Lift the BSD-style "must have a tty" restriction, which is imposed 
          upon the set of all processes when some BSD-style (without "-") 
          options are used or when the ps personality setting is BSD-like.
          The set of processes selected in this manner is in addition to the 
          set of processes selected by other means.  An alternate 
          description is that this option causes ps to list all processes 
          owned by you (same EUID as ps), or to list all processes when used 
          together with the a option.

例子

$ ps aux | head -10
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  51120  2796 ?        Ss   Dec22   0:09 /usr/lib/systemd/systemd --system --deserialize 22
root         2  0.0  0.0      0     0 ?        S    Dec22   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Dec22   0:04 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   Dec22   0:00 [kworker/0:0H]
root         7  0.0  0.0      0     0 ?        S    Dec22   0:15 [migration/0]
root         8  0.0  0.0      0     0 ?        S    Dec22   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        S    Dec22   2:47 [rcu_sched]
...
saml      3015  0.0  0.0 117756   596 pts/2    Ss   Dec22   0:00 bash
saml      3093  0.9  4.1 1539436 330796 ?      Sl   Dec22  70:16 /usr/lib64/thunderbird/thunderbird
saml      3873  0.0  0.1 1482432 8628 ?        Sl   Dec22   0:02 gvim -f
root      5675  0.0  0.0 124096   412 ?        Ss   Dec22   0:02 /usr/sbin/crond -n
root      5777  0.0  0.0  51132  1068 ?        Ss   Dec22   0:08 /usr/sbin/wpa_supplicant -u -f /var/log/wpa_supplica
saml      5987  0.7  1.5 1237740 119876 ?      Sl   Dec26  14:05 /opt/google/chrome/chrome --type=renderer --lang=en-
root      6115  0.0  0.0      0     0 ?        S    Dec27   0:06 [kworker/0:2]
...

通过上述开关,您将获得与上述流程相关的输出。

开关aux将向您显示:

  • 所有用户的进程
  • 向您展示以面向用户的方式列出的进程(按用户名)
  • 向您显示所有进程,而不仅仅是连接到终端的进程。这将包括 crond、upowerd 等服务等进程。

答案3

理解的关键是联机帮助页不是搜索“aux”(我首先尝试过),而是关注描述参数类型的部分ps

此版本的 ps 接受多种选项:

  1. UNIX 选项,可以分组并且前面必须有破折号。
  2. BSD 选项,可以分组并且不能与破折号一起使用。
  3. GNU 长选项,前面有两个破折号。

由此,我们知道这aux是一组(分组的)BSD 选项 、aux这使得它们更容易查找。

  • ax控制选择哪些进程,并一起使用被明确描述为选择所有进程。

  • u使用“面向用户”的格式输出,该格式提供更多列,包括用户 ID 和 CPU/内存使用情况。

因为u单独控制输出格式,所以您可以获得仅针对特定进程的“ps aux”样式输出ps u $pid1 $pid2 ...

答案4

ps:进程状态

对我来说,两者都/bin/ps --version得到/usr/bin/ps --versionps from procps-ng 3.3.16

ps 是由以下命令提供的命令过程
命令行和全屏公用事业用于浏览procfs,由内核动态生成的“伪”文件系统,用于提供有关其进程表中条目状态的信息。

2种语法

要查看系统上的每个进程,请使用:

  1. 标准语法
  • 聚苯乙烯
  • 聚苯乙烯-EF

顺便说一句,示例ps -u

  • ps -u root --format=user,pid,command # 与此行相同:
  • ps -uroot --format=user,pid,command #(多么难看的语法啊!)

输出为:

    USER         PID COMMAND
    root           1 /sbin/init splash
    root           2 [kthreadd]
    root           3 [rcu_gp]
    root           4 [rcu_par_gp]
    root           6 [kworker/0:0H-kblockd]
    root           9 [kworker/u80:0-ixgbe]

根据这个 POSIX 和 UNIX 标准,ps -aux意味着ps -a -ux,打印:
1. 具有 tty 的进程(会话领导者除外) [by -a]
2. 名为“x”的用户拥有的所有进程 [by -ux] ( -u: 选择有效的进程序列)

流程选择选项是附加的(如果满足以下条件,将显示流程)任何给定的选择标准)

如果名为“x”的用户(当前用户?)不存在,ps -aux 可能落到 ps aux,并打印警告

-x手册页中没有选项,但ps -x可以找到与 相同的进程ps -ux,(以不同的输出格式)

  • ps -ux --format=user获取:
    用户名不存在
  • ps -x --format=user
    得到正确的结果(对应于当前用户)

难怪manpage提醒:

此行为旨在帮助过渡老的 脚本和习惯。它很脆弱,因此不应依赖


  1. BSD语法:
    ps 斧头
  • 答:所有用户

  • x:列表全部进程拥有者(与 ps 相同的 EUID)。或者更具体地说,包括没有的进程控制终端(包括未连接到终端的进程)。

    所以, ax将列出所有进程

  • u:资源输出圣人格式
    示例: ps axu


此场景显示了 zsh 自动完成的便利性(按 Tab 并获取提示)在此输入图像描述

在此输入图像描述

此联机帮助页对读者友好: https://www.mankier.com/1/ps

相关内容