对“ps”命令的 Unix 与 BSD 标志格式的含义感到困惑

对“ps”命令的 Unix 与 BSD 标志格式的含义感到困惑

我读到该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 auxps -ef不是混合。

唯一的x标志是 BSD 标志,因此ps xps -x产生相同的结果;但这对于两种变体中定义的标志都不起作用。

这一切都是特定于procpsprocps-ngps x和的等价物ps -x是“第二次机会”解析阶段的结果,如果第一遍没有完全解析所有参数,则调用该阶段;这没有记录在联机帮助页中,但在HACKING源代码中的文件

除非个性强制 BSD 解析,否则 parser.c 会尝试将命令行解析为混合的 BSD+SysV+Gnu 混乱。失败时,将尝试 BSD 解析。如果BSD解析失败已尝试 SysV 解析,错误消息来自原始 SysV 解析。

相关内容