Unterschiedliche Ausgabe von "ps -a" auf Ubuntu und Fedora

582
obo

Ich habe bemerkt, dass der ps -aBefehl eine andere Ausgabe erzeugt, wenn ich ihn auf Ubuntu "16.04" und Fedora 23 ausführte. Laut der Manpage der beiden Distributionen sollte die Option -a Folgendes tun:

-a Wählen Sie alle Prozesse mit Ausnahme der Sitzungsleiter (siehe getsid (2)) und Prozessen aus, die keinem Terminal zugeordnet sind.

Dies scheint bei Ubuntu nicht der Fall zu sein.

Ich kann dieses Verhalten nicht erklären, da es so aussieht, als hätten sie dieselbe Version von procps.

Fedora:

  • Name: procps-ng
  • Version: 3.3.10

Ubuntu:

  • Paket: procps
  • Version: 2: 3.3.10-4ubuntu2

Hast du eine Ahnung, warum das so ist? Mache ich etwas falsch ?

Danke, BR,

3

2 Antworten auf die Frage

2
Argonauts

Es gibt mindestens zwei Dinge, die dies sein könnte. Am wahrscheinlichsten ist, dass auf Fedora ein psAlias ​​auf ps -A(oder ps adas a ohne das - Ergebnis in einem ähnlichen Verhalten wie -A) erfolgt; was würde das Ausgabeformat erklären. Auf jedem Systemtyp, der angibt which ps, welche Aliase anstelle der ausführbaren Datei direkt aufgerufen werden.

Sie können beliebige Aliasnamen umgehen, indem Sie entweder den vollständigen Pfad des Programms aufrufen (z. B. /bin/psden Befehl mit einem führenden '\' starten, z \ps.

Die weitaus unwahrscheinlichere Sache ist, dass die beiden Distributionen ps mit unterschiedlichen Flags erstellt haben (was zu unterschiedlichem Verhalten führt). Ich habe gerade ps auf Fedora 23 geprüft, und die Standardausgabe entspricht der von ubunutu, was Sie bekommen. Ich denke, Sie haben einen Alias ​​gesetzt.

Der Alias ​​wird höchstwahrscheinlich in der Datei ~ / .bashrc festgelegt. andere Standorte sind möglich. Sie können die Aliase in Ihrer aktuellen Umgebung anzeigen, indem Sie aliasim Terminal keine Argumente eingeben .

Aktualisieren:

Da sie kein Alias ​​sind, ändert etwas (um das Offensichtliche zu sagen) das Verhalten. Hier sind einige Dinge, die Sie beachten sollten, um herauszufinden, was das ist: Führen Sie sie auf jedem System in einer 'sauberen' Umgebung aus:

env -i ps 

und sehen, ob sich das Verhalten ändert. Wenn dies der Fall ist, wissen wir, dass es eine Umgebung ist, die die Umgebung verändert.

Geben Sie auf jedem System den folgenden Befehl ein: ps --info

Prüfen Sie, ob das Feldfeld personality=0xnicht Null ist und die Ausgabe ändern kann. Beachten Sie alle anderen Unterschiede zu dieser Ausgabe. Poste sie, wenn du die Bedeutung des Unterschieds nicht entschlüsseln kannst.

Um zu sehen, ob etwas neu bestimmt wird ps, führen Sie auf jeder Shell die folgende aus:

set -x ps -a 

Sie sollten etwas sehen wie:

+ps -a 

hallte heraus; Wenn Sie etwas anderes sehen, z. B. +ps auxwürde dies dies verursachen. Dies wird normalerweise durch einen Alias ​​getan, könnte aber eine Funktion sein. Sie können den Bash-Spam durch Ausführen deaktivierenset +x

Überprüfen Sie auf jedem Rechner, ob die Binärdatei ein Symlink zu etwas anderem ist und ob dort etwas Seltsames passiert (wahrscheinlich auf Fedora, dass / usr / bin / ps ein Symlink zu / bin / ps ist)

ls -alt /bin/ps ls -alt /usr/bin/ps 

Versuchen

type ps 

Auf jeder Maschine; Die Ergebnisse sollten gleich sein, wenn sie nicht mit den Ergebnissen antworten.

Es gibt einige Umgebungsvariablen, die das Verhalten von ps verändern können. um diese Art zu sehen man ps; Sie sind am Boden. Geben Sie envin jedes Betriebssystem ein und prüfen Sie, ob welche gesetzt sind. Sie können für sie grep:

env | grep 'CMD_ENV\|PS_PERSONALITY\|_XPG' 

Da sind andere; Sehen Sie sich die Manpage an, um sie der Abfrage hinzuzufügen, wenn diese nichts zurückgeben oder um herauszufinden, was die Einstellung bedeutet ps.

Hier geht es ins Unkraut, aber wenn Sie immer noch nichts haben, überprüfen Sie die Binärdatei-Kopfzeilen auf jedem:

readelf -h /bin/ps 

Wenn sich keine Unterschiede ergeben, können Sie die Datei / bin / ps in das andere Betriebssystem kopieren und einen Vergleich durchführen:

cmp -b /bin/ps /path/to/copy/of/ps 

Dadurch werden alle Bytes ausgegeben, die sich zwischen den beiden Dateien unterscheiden. Die tatsächlichen Werte spielen keine Rolle. nur die Anzahl der Unterschiede.

Sie werden anders sein; Wenn es nur ein paar Bytes Unterschied ist, dann wäre dies nur das gcc-Feld NT_GNU_BUILD_ID, das für jeden Build eindeutig ist, selbst ansonsten identische Dateien. Wenn sie sich nicht wesentlich von dem Verhalten der Umwelt unterscheiden, kann ich nicht mehr nachprüfen.

Es gibt keinen Alias ​​für ps in beiden Distributionen, \ ps liefert dasselbe Ergebnis. obo vor 7 Jahren 0
und der Befehl "welche ps" gab Ihnen auf beiden die gleichen Ergebnisse? Ich habe die Antwort mit einigen zusätzlichen Punkten aktualisiert. Argonauts vor 7 Jahren 0
Die Ausgabe von "which ps" lautet auf Fedora "/ usr / bin / ps" und auf Ubuntu "/ bin / ps". Ich habe auch die Ausgabe des "Alias" -Befehls und "ps" ist nicht in. obo vor 7 Jahren 0
Die Fedora-Version von `ps` verhalten sich unter Ubuntu als Ubuntu-Version. Könnte es mit der Kernel-Version zusammenhängen (4.4.0 auf Ubuntu und 4.4.9 auf Fedora)? obo vor 7 Jahren 0
Hast du die anderen Schritte ausprobiert? env -i? Was waren diese Ergebnisse? Argonauts vor 7 Jahren 0
Ja, alle anderen Schritte haben das Verhalten von ps nicht geändert (außer bei cmp, das ich nicht getestet habe) obo vor 7 Jahren 0
Basierend auf dem, was Sie beschrieben haben, muss es sich um eine Umgebungskonfiguration handeln. Ich würde denken, dass einer der von mir aufgeführten Tests einen Test anzeigt oder zumindest einen Hinweis darauf gibt. Die Wahrscheinlichkeit, dass ps --info identische Ergebnisse liefert, ist mit einem anderen Distributionssystem äußerst niedrig. Welche Version von Ubuntu? Argonauts vor 7 Jahren 0
Ich benutze Ubuntu 16.04. ps --info ist nicht dasselbe gcc, glibc und kernel unterscheiden sich obo vor 7 Jahren 0
Danke für Ihre Hilfe. Ich habe etwas aus deiner Antwort gelernt. obo vor 7 Jahren 0
0
obo

ps Man Seite

-a Wählen Sie alle Prozesse mit Ausnahme der Sitzungsleiter (siehe getsid (2)) und Prozessen aus, die keinem Terminal zugeordnet sind.

Dieses Verhalten wird durch die Tatsache erklärt, dass im Vergleich zu Ubuntu mehr Prozesse an ein Terminal in Fedora angeschlossen sind.

  1. Ubuntu
  2. Fedora