Ich habe gelesen, dass der ps
Befehl 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
ps
Implementierungen,ps
mit denen dies kompatibel ist, gibt es einige synonyme Optionen, die funktional identisch sind.Beachten Sie, dass
ps -aux
sich von unterscheidetps aux
. Die POSIX- und UNIX-Standards erfordern, dassps -aux
alle Prozesse gedruckt werden, die einem Benutzer mit dem Namen „x“ gehören, sowie alle Prozesse, die durch die-a
Option ausgewählt würden. Wenn der Benutzer mit dem Namen „x“ nicht existiert, kann dieser ps den Befehlps aux
stattdessen 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 aux
oder, ps -ef
um Details aller Prozesse anzuzeigen, nicht einer Mischung.
Das einzige x
Flag ist das BSD-Flag, daher erzeugen ps x
und ps -x
das gleiche Ergebnis; das funktioniert aber nicht für Flags, die in beiden Varianten definiert sind.
All dies ist spezifisch fürprocps
Undprocps-ng
. Die Äquivalenz von ps x
und ps -x
ist 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 HACKING
Datei 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.