我读到该ps
命令可以采用两种格式的标志:
- Unix 格式,您应该在标志前面加上破折号。
- BSD 格式中,标志前面不应带有破折号。
现在,相同的标志是否可以用于两种格式,例如以下命令是否意味着相同的事情:
ps -x
ps x
或者 Unix 格式是否有自己的一组标志,而 BSD 格式有一组完全不同的标志?
答案1
这联机帮助页回答你的问题:
不同类型的选项可以自由混合,但可能会出现冲突。由于与许多标准和
ps
实现ps
兼容,因此存在一些功能相同的同义选项。请注意,
ps -aux
与 不同ps aux
。 POSIX 和 UNIX 标准要求ps -aux
打印名为“x”的用户拥有的所有进程,以及打印该-a
选项将选择的所有进程。如果名为“x”的用户不存在,则此 ps 可能会将命令解释为ps aux
并打印警告。此行为旨在帮助转变旧的脚本和习惯。它很脆弱,容易发生变化,因此不应依赖它。
标志不同,但可以组合。通常你会选择一个,例如或者查看所有过程的详细信息,ps aux
而ps -ef
不是混合。
唯一的x
标志是 BSD 标志,因此ps x
和ps -x
产生相同的结果;但这对于两种变体中定义的标志都不起作用。
这一切都是特定于procps
和procps-ng
。ps x
和的等价物ps -x
是“第二次机会”解析阶段的结果,如果第一遍没有完全解析所有参数,则调用该阶段;这没有记录在联机帮助页中,但在HACKING
源代码中的文件:
除非个性强制 BSD 解析,否则 parser.c 会尝试将命令行解析为混合的 BSD+SysV+Gnu 混乱。失败时,将尝试 BSD 解析。如果BSD解析失败后已尝试 SysV 解析,错误消息来自原始 SysV 解析。