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 接受多种选项:
- UNIX 选项,可以分组并且前面必须有破折号。
- BSD 选项,可以分组并且不能与破折号一起使用。
- GNU 长选项,前面有两个破折号。
由此,我们知道这aux
是一组(分组的)BSD 选项 、a
和u
,x
这使得它们更容易查找。
a
和x
控制选择哪些进程,并一起使用被明确描述为选择所有进程。u
使用“面向用户”的格式输出,该格式提供更多列,包括用户 ID 和 CPU/内存使用情况。
因为u
单独控制输出格式,所以您可以获得仅针对特定进程的“ps aux”样式输出ps u $pid1 $pid2 ...
。
答案4
ps:进程状态
对我来说,两者都/bin/ps --version
得到/usr/bin/ps --version
:ps from procps-ng 3.3.16
ps 是由以下命令提供的命令过程:
命令行和全屏公用事业用于浏览procfs
,由内核动态生成的“伪”文件系统,用于提供有关其进程表中条目状态的信息。
2种语法
要查看系统上的每个进程,请使用:
- 标准语法
- 聚苯乙烯
- 聚苯乙烯-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
提醒:
此行为旨在帮助过渡老的 脚本和习惯。它很脆弱,因此不应依赖
- BSD语法:
ps 斧头
答:所有用户
x:列表全部进程拥有者你(与 ps 相同的 EUID)。或者更具体地说,包括没有的进程控制终端(包括未连接到终端的进程)。
所以,
ax
将列出所有进程u:资源输出你圣人格式
示例:ps axu