Es ist alles wegen einer Person namens Albert D. Cahalan. Xe kannte BSD nicht.
Der ursprüngliche ps
Befehl für Linux wurde im März 1992 von Branko Lankester geschrieben und erstmals veröffentlicht . Es wurde später als "kmem-ps" bekannt, um es von "proc-ps" zu unterscheiden, die im Dezember 1992 von Michael K. Johnson veröffentlicht wurden . M. Lankester hat ps
das kmem
Gerät verwendet, um die Prozesstabelle aus dem Kernelspeicher zu lesen. M. Johnson hat ps
das proc
Dateisystem zum Lesen der Prozesstabelle verwendet, und in den nächsten Jahren wurden mehrere Versionen davon veröffentlicht (z. B. Januar 1993 , Januar 1994 ).
Diese ps
Befehle lieferten schon damals eine ziemlich alte Syntax für den Befehl, dessen Stil aus den getopt()
Tagen der 1980er Jahre stammte . Hier ist es aus einer Veröffentlichung von kmem-ps im November 1993 :
Verwendung: ps 0acefhHjlmnprsStuUvwxXy [t tty] [pid [, pid] ...]
j - Jobsteuerungsformat, l - Langformat, m - Speicherformat,
s - Signalformat, u - Benutzerformat, v - virtuelles Speicherformat,
X-Register-Format, Y-Syscall-Format, Standard-Kurzformat
0 - Aufgabe Null einschließen, a - Prozesse für alle Benutzer einschließen
c - Nur Befehlsname drucken, E-Show-Umgebungsvariablen, F-Gesamtstruktur der Prozesse
h - Kopfzeile unterdrücken, n - Benutzer- und wchan-Felder numerisch drucken
p - Anzahl der Drucke in Seiten, r - Auflistung auf ausführbare Prozesse beschränken
S - Fassen Sie die Verwendung für Kinder in den Feldern CPU-Zeit und Seitenfehler zusammen
t tty - Zeigt alle Prozesse mit TTY als steuerndem Terminal an
w - wide: 132, ww - 264, www - unbegrenzt, Standard - Bildschirmbreite oder 80
x - Prozesse ohne steuerndes Terminal einschließen
U [SYSTEM-PATH [SWAP-PATH]] - PS-Datenbank aktualisieren
Wie Sie sehen können, gab es eine Persönlichkeit, eine einzige Bedeutung für die Buchstaben und keine führenden Minuszeichen.
Die Idee einer U
Flagge (nicht -U
beachten) stammt aus einem Patchps
von 1986 an BSD , der mod.sources
von Michael A. Callahan in der Usenet- Newsgroup (als Band 6, Ausgabe 83) veröffentlicht wurde.
Einige Jahre später kam Albert D. Cahalan, der Proc-ps neu schrieb. Xe machte viele Behauptungen darüber. Leider wurde das Entlarven vieler dieser Behauptungen vergessen, und all diese Jahre später steht das ps
Handbuch, das behauptet, dass dies ps
Unix-, BSD- und GNU-Optionssyntax bietet.
Es tut nicht.
BSD ps
hat die getopt()
Optionsverarbeitung verwendet, seit Marc Teitelbaum sie im April 1990 geändert hat , Jahre bevor sogar die Linux-Version von M. Lankester ps
, geschweige denn die von A. Cahalan.
A. Cahalan hat ps
die alte Linux-Syntax kmem-ps / proc-ps bereitgestellt. Später wurde eine Syntax hinzugefügt, die A. Cahalan angeblich vom AIX- ps
Befehl stammt. A. Cahalan, der unerbittlich die Ansicht im Usenet vertrat, dass "BSD saugt und SysV nicht", dass FreeBSD "saugt" und dass das xyr-Umschreiben von proc-ps eine "standardkonforme /bin/ps
" war, die "Ihre veraltete BSD-Syntax" unterstützte , Ironischerweise war ihm nicht bewusst, dass dies zu diesem Zeitpunkt fast ein Jahrzehnt lang nicht die BSD-Syntax gewesen war. ps
selbst war in diesem Jahr gerade erst standardisiert worden. Die Analyse in der Begründung des Standards von BSD im Vergleich zu AT & T Unix-Befehlszeilenoptionen sind viel nachdenklicher als alle anderen von A. Cahalan.
Dies führte ps
bekanntermaßen die I_WANT_A_BROKEN_PS
Umgebungsvariable ein, die A. Cahalan verwirrenderweise M. Johnson vorwarf und gleichzeitig behauptete, xyrself sei für das Parsen der Optionen verantwortlich. Tatsächlich behielten die beiden zwei ps
Implementierungen parallel bei .
Seltsamerweise würde Cahalan / Johnson Folgendes angeben , wenn man getopt()
Optionen im Stil verwendet, denen Minuszeichen vorangestellt sind, wie dies ps
zu der Zeit für BSD der Fall war und als (damals) neuer Standard für ps
dokumentierte ps
:
Warnung: `- 'veraltet; benutze `ps e ', nicht` ps -e'
Eigentlich wurde es nicht benutzt -
, was veraltet war. In der Tat war die Behauptung von A. Cahalan, dass xyr ps
auf die übliche Weise funktionieren würde, -
wie es BSD ps
bereits getan hatte. Dies verursachte in den späten 1990er und frühen 2000er Jahren zahlreiche Fragen von verwirrten Benutzern und verwirrte Systemadministratoren und Benutzer im Allgemeinen, als Bücher anfingen, Dinge zu sagen wie:
Sie fragen sich vielleicht, warum wir keine Bindestriche vor den Flags mit verwenden ps
. Sie können sie verwenden, aber ps
das ist die altmodische Art und Sie erhalten eine Warnung , dass Sie sich an das Programm halten müssen.
- Deborah S. Ray und Eric J. Ray (1998). UNIX . Peachpit Press. ISBN 9780201353952. p. 174.
Sie können dies immer noch in dem oldps
Handbuch sehen, das davon spricht, "von der BSD-Version von ps
" abgeleitet zu sein, obwohl dies wirklich nicht der Fall war, da es ziemlich offensichtlich von der Linux- Version abgeleitet ist. und die besagt, dass "Befehlszeilenargumenten kein" - "vorangestellt werden sollte, da in Zukunft ein" - "verwendet wird, um Unix98-Standard-Befehlszeilenargumente anzugeben, während kein" - "das angibt aktueller "erweiterter BSD" -Stil von Befehlszeilenargumenten ".
Einiges davon wurde in procps-ng abgeschwächt, einem dritten Umschreiben, das kurz nach der Jahrhundertwende durchgeführt wurde (als "-ng" in Projektnamen à la mode war), als Cahalan / Johnson ps
wurde oldps
. Wie Sie sehen können, steht im ps
Handbuch nicht mehr "erweitert". Aber die neue Version von ps
(an der noch A. Cahalan beteiligt war ) hat die gesamte Idee der Mehrfachpersönlichkeit auf die Spitze getrieben . Leider es darüber hinaus noch verewigte die canard über BSD - Befehlszeilenoptionen, und tut dies bis heute.
In der Zwischenzeit die glücklich Single -Persönlichkeit BSD ps
hat bereitgestellt getopt()
Befehlszeilenoption Parsing für die letzten 29 Jahre und 7 Tage in der Zeit , diese Antwort zu schreiben; FreeBSD hat einen procstat
Befehl erhalten; NetBSD und OpenBSD ps
haben die neue Kompromissoption verfolgt -A
. und die Single Unix Specification hat die neue BSD- -O
Option für reserviert (aber nicht enthalten) ps
.
Weiterführende Literatur
- Robert NM Watson (14.01.2017).
procstat
. FreeBSD General Commands Manual .
ps
. FreeBSD General Commands Manual . 2018-03-13.
ps
. NetBSD General Commands Manual . 2016-12-02.
ps
. OpenBSD General Commands Manual . 2016-10-26.