Verwirrt über die Bedeutung des Unix- vs. BSD-Flagsformats für den Befehl „ps“

Verwirrt über die Bedeutung des Unix- vs. BSD-Flagsformats für den Befehl „ps“

Ich habe gelesen, dass der psBefehl Flags in zwei Formaten annehmen kann:

  • Das Unix-Format, bei dem Sie den Flags einen Bindestrich voranstellen sollten.
  • Das BSD-Format, bei dem Sie den Flags keinen Bindestrich voranstellen sollten.

Können nun die gleichen Flags mit beiden Formaten verwendet werden? Bedeuten beispielsweise die folgenden Befehle das Gleiche:

ps -x
ps x

Oder verfügt das Unix-Format über einen eigenen Satz von Flags, während das BSD-Format über einen völlig anderen Satz von Flags verfügt?

Antwort1

Dermanpagebeantwortet Ihre Frage:

Optionen unterschiedlichen Typs können beliebig gemischt werden, es können jedoch Konflikte auftreten. Aufgrund der vielen Standards und psImplementierungen, psmit denen dies kompatibel ist, gibt es einige synonyme Optionen, die funktional identisch sind.

Beachten Sie, dass ps -auxsich von unterscheidet ps aux. Die POSIX- und UNIX-Standards erfordern, dass ps -auxalle Prozesse gedruckt werden, die einem Benutzer mit dem Namen „x“ gehören, sowie alle Prozesse, die durch die -aOption ausgewählt würden. Wenn der Benutzer mit dem Namen „x“ nicht existiert, kann dieser ps den Befehl ps auxstattdessen als interpretieren und eine Warnung ausgeben. Dieses Verhalten soll beim Übergang von alten Skripten und Gewohnheiten helfen. Es ist fragil, unterliegt Änderungen und sollte daher nicht als verlässlich angesehen werden.

Die Flaggen sind unterschiedlich, können aber kombiniert werden. Normalerweise wählt man jedoch eine aus,z.Bentweder ps auxoder, ps -efum Details aller Prozesse anzuzeigen, nicht einer Mischung.

Das einzige xFlag ist das BSD-Flag, daher erzeugen ps xund ps -xdas gleiche Ergebnis; das funktioniert aber nicht für Flags, die in beiden Varianten definiert sind.

All dies ist spezifisch fürprocpsUndprocps-ng. Die Äquivalenz von ps xund ps -xist das Ergebnis einer „zweiten Chance“-Analysephase, die aufgerufen wird, wenn beim ersten Durchlauf nicht alle Argumente vollständig analysiert werden. Dies ist nicht in der Manpage dokumentiert, wird aber indie HACKINGDatei im Quellcode:

Sofern die Persönlichkeit keine BSD-Analyse erzwingt, versucht parser.c, die Befehlszeile als gemischtes BSD+SysV+Gnu-Chaos zu analysieren. Bei einem Fehlschlag wird eine BSD-Analyse versucht. Wenn die BSD-Analyse fehlschlägtnachEs wurde eine SysV-Analyse versucht, die Fehlermeldung stammt von der ursprünglichen SysV-Analyse.

verwandte Informationen