Es ist alles wegen einer Person namens Albert D. Cahalan. Xe kannte BSD nicht.
Der ursprüngliche psBefehl 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 psdas kmemGerät verwendet, um die Prozesstabelle aus dem Kernelspeicher zu lesen. M. Johnson hat psdas procDateisystem zum Lesen der Prozesstabelle verwendet, und in den nächsten Jahren wurden mehrere Versionen davon veröffentlicht (z. B. Januar 1993 , Januar 1994 ).
Diese psBefehle 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 UFlagge (nicht -Ubeachten) stammt aus einem Patchps von 1986 an BSD , der mod.sourcesvon 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 psHandbuch, das behauptet, dass dies psUnix-, BSD- und GNU-Optionssyntax bietet.
Es tut nicht.
BSD pshat 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 psdie alte Linux-Syntax kmem-ps / proc-ps bereitgestellt. Später wurde eine Syntax hinzugefügt, die A. Cahalan angeblich vom AIX- psBefehl 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. psselbst 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 psbekanntermaßen die I_WANT_A_BROKEN_PSUmgebungsvariable 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 psImplementierungen parallel bei .
Seltsamerweise würde Cahalan / Johnson Folgendes angeben , wenn man getopt()Optionen im Stil verwendet, denen Minuszeichen vorangestellt sind, wie dies pszu der Zeit für BSD der Fall war und als (damals) neuer Standard für psdokumentierte 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 psauf die übliche Weise funktionieren würde, -wie es BSD psbereits 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 psdas 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 oldpsHandbuch 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 pswurde oldps. Wie Sie sehen können, steht im psHandbuch 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 pshat bereitgestellt getopt()Befehlszeilenoption Parsing für die letzten 29 Jahre und 7 Tage in der Zeit , diese Antwort zu schreiben; FreeBSD hat einen procstatBefehl erhalten; NetBSD und OpenBSD pshaben die neue Kompromissoption verfolgt -A. und die Single Unix Specification hat die neue BSD- -OOption 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.