谁能向我解释一下有什么区别
ps -ef
和
ps -auxwww
有一些例子吗?
我只是想知道它们之间的区别。我查过一个邮政提供信息,即ps -ef
不会列出具有很长命令行的进程,同时ps -auxwww
也会列出这些进程。
答案1
ps
是一个非常依赖系统的命令。由于历史原因,存在并且一直存在不同的口味。
ps -ef
e
是在 Unices 上以uller 格式列表获取信息的语法f
,该列表基于 AT&T 的 Unix 支持组 (USG),该组是 AT&T 负责 Unix 商业化的部分。或者如果您愿意的话,也可以使用 SysV 语法,尽管ps -ef
1980 年 SysIII 中就已经存在了。
它由 POSIX 指定,但仅在 XSI 选项下(对应于 X/Open 规范,该规范旨在为基于 SysV 的系统带来某种形式的标准化,现已合并到 POSIX 中)。
最接近的 POSIX 等效项是ps -A -o user,pid,ppid,tty,time,args
(缺少C
(CPU) 列)。
ps aux
将是 BSD 语法,来自 more学术的基于 AT&T 研究(贝尔实验室)开发的 Unix 原始版本的系统。您没有在-
那里使用。a
全部进程(不仅仅是与当前终端关联的进程),u
对于面向用户的输出包括附加信息,x
还包括与任何终端无关的进程(Research Unix v3ps
首次出现时已经有-x
此功能)。w
为了宽的很久以后才添加的。
通常在基于 Linux 的系统上发现的实现procps
ps
试图协调所有这些不同的(并且通常不兼容的)语法,SysV 语法、BSD 语法,甚至更像来自 HP/UX 或 AIX 的语法,因此支持大多数语法,但以下情况除外:一个与另一个发生冲突。
您系统上的手册页将为您提供各种标志含义的所有详细信息。
是否ps -ef
截断命令行很大程度上取决于系统、系统版本、实现和版本ps
以及输出是否发送到终端。一些支持-w
使其更广泛。在某些系统(包括旧版本的 Linux)上,命令行会被系统本身截断,因此如果命令行非常大,您将无法轻松获取完整命令行。
标准情况下,您还可以选择指定所需的字段:
ps -A -o pid -o args
例如,仅对于A
ll 进程的 pid 和命令行(从技术上讲,传递给进程执行的最后一个命令的参数列表,尽管在许多系统上,进程也可以任意更改它)。
ps -A -o pid= -o args=
跳过标题。
请注意,并非所有系统都支持相同的字段列表。
在脚本中,我建议坚持POSIX 语法(避免可选功能)。
要根据某些条件(包括命令行)搜索进程,请使用pgrep
(pkill
来终止它们)。这些不是标准的,但很常见,并且使用起来比处理ps
.