这可以追溯到的有些曲折历史的Unix(维基百科有一个简图,这是远 从完成)。尤其是一段时间以来,有两个主要潮流:AT&T开发的System V和加利福尼亚大学伯克利分校开发的BSD。这是在1980年代初期,比Linux(1991)早,更不用说Ubuntu(2004)了。通常,这两种潮流会做出不同的决定,甚至在今天,您仍会偶尔看到“ System V”和“ BSD”的变体或功能。
该ps
命令可以追溯到Unix的第一个发行版(它不在版本1中,我可以在网上找到的最早的手册页是1974年的版本5(第94页))。当时,ps
只有几个选项,例如,ps a
将显示所有进程而不是仅显示用户的ps x
进程,并且将显示未连接终端的进程。您会注意到选项不是以-
:开头的,当时,-
用于选项的约定并不像今天这样系统化,对于以文件名作为常规参数的命令来说,这主要是一件事情。
随着时间的流逝,Unix的各个方面都扩展ps
了更多的选择。该变种BSD选择保留原来的语法,没有领导-
,并a
和x
今天仍然存在。System V变体选择采用-
for选项的语法约定,并使用不同的字母(例如ps -e
,显示所有进程)。Oracle(以前是Sun)Solaris是System V变体的示例(对于考虑到BSD编写的应用ps
程序,Solaris还在默认目录中没有提供单独的可执行文件PATH
)。
在Linux出现之时,使用Linux的人通常会先有一个Unix变体或另一个变体的经验。Linux有时以技术上的考虑或实施该功能的人的经验和喜好为基础,以System V方式,BSD方式,有时以自己的方式进行操作。Linux的ps
命令从类似BSD的选项开始,例如ps ae
显示所有进程并在清单中包含环境变量。随着时间的推移(20世纪90年代末,我不记得什么时候),Linux的的作者ps
谁被用于系统V.所以今天无论是对人的补充选项ps ax
或ps -e
将列出Linux下的所有进程,甚至还有一个环境变量(PS_PERSONALITY
)使ps
由于旧的脚本和有习惯的人,其行为更像各种Unix旧的Unix变体。
使用多个Unix变体的人不喜欢从一个Unix变体切换到另一个Unix变体时必须修改程序和习惯。因此,人们努力标准化功能的子集。这导致了POSIX标准(由IEEE领导),Ubuntu基本上遵循了该标准。其范围包括ps
命令的第一版于1992年问世。此版本无法在线使用,但1997版可以在线获得。对于ps
命令,就像在许多其他情况下一样,POSIX采用了System V的处理方式。
该ps
命令的标准语法是与System V和POSIX兼容的一种。另外,该语法可以说是标准语法,因为它-
默认情况下用于引入选项。某些选项仅以两种语法之一存在。幸运的是,它们可以在同一通话中混合使用。
一般来说,“ BSD”和“ System V”没有任何技术含义。它指的是历史:“ BSD”是BSD在1980年代前后所做的选择,“ System V”是AT&T及其合作伙伴(尤其是Sun)做出的选择。IEEE标准化委员会可以选择“ POSIX”。
ps
optargs 之间的历史差异,就要站在深渊的边缘。