Wie kann ich in Solaris eine vollständige Prozessliste ohne abgeschnittene Linien erstellen?

57

Gibt es eine Möglichkeit, eine vollständige Prozessauflistung in Solaris ohne abgeschnittene Linien zu generieren? Ich habe den psBefehl mit den folgenden Argumenten ausprobiert :

  -f Erzeugt eine vollständige Liste. (Siehe unten für
                      Bedeutung von Spalten in einer vollständigen Liste
                      ing.)
  -l Erzeugt eine lange Liste. (Siehe unten.)

Also, diese beiden scheinen zu tun, was ich will, aber weiter unten in der ps-Manpage finde ich Folgendes:

 
 args Der Befehl mit all seinen Argumenten als
                         Zeichenfolge. Die Implementierung wird möglicherweise abgeschnitten
                         dieser Wert auf die Feldbreite; es ist
                         implementierungsabhängig, ob überhaupt
                         weitere Kürzung erfolgt. Es ist
                         nicht angegeben, ob die Zeichenfolge
                         dargestellt ist eine Version des Arguments
                         Liste, wie es an den Befehl übergeben wurde
                         wenn es gestartet wurde, oder eine Version von
                         Argumente, wie sie möglicherweise geändert wurden
                         von der Anwendung. Anwendungen können nicht
                         davon abhängen zu können, ihre
                         Argumentliste und mit dieser Änderung
                         spiegelt sich in der Ausgabe von ps wider.
                         Die Solaris-Implementierung begrenzt die
                         Zeichenfolge bis 80 Byte; Die Zeichenfolge ist die
                         Version der Argumentliste wie sie war
                         wird beim Start an den Befehl übergeben.

Was im Grunde bedeutet, dass die Ausgabe abgeschnitten wird und ich nichts dagegen tun kann. Also komme ich her. Sicherlich sind andere Menschen auf dieses Problem gestoßen und haben vielleicht sogar einen Weg, es zu umgehen. Ich vermute, ps kann das nicht und ich muss andere Tools verwenden, um das zu tun. Ist das richtig?

gabe.
quelle
Sprechen Sie über den psBefehl? Wenn ja, aktualisieren Sie die Frage bitte, damit sie klarer wird.
Phunehehe
Ja, tut mir leid ... ich habe anfangs mit dem Befehl ps herumgebastelt. Ich habe die Frage klarer formuliert.
gabe.

Antworten:

63

du könntest es versuchen

pargs <PID>

Dies gibt Ihnen eine Liste aller Argumente

oder verwenden Sie eine andere ps. Wenn als root ausgeführt (oder ein beliebiger Benutzer mit ausreichenden Rechten für diese Angelegenheit)

/usr/ucb/ps auxww

wird Ihnen alle Argumente geben. Sein Teil von SUNWscpu, "Source Compatibility, (Usr)"

Marcel G
quelle
pargsZeigt die In-Process-Kopie der Befehlszeilenargumente (und optional der Umgebung) an. Gut zu wissen, danke!
Gilles 'SO- hör auf böse zu sein'
1
Dieses ganze / usr / ucb-Verzeichnis ist neu für mich ... Ich mag es!
gabe.
2
Wenn Sie unter Solaris 11 Optionen ohne Bindestrich verwenden (z. B. "/ usr / bin / ps auxwww"), werden diese als Optionen im UCB-Stil behandelt, und in der Ausgabe werden extra lange Zeilen angezeigt, auch wenn Sie NICHT als Root ausgeführt werden. Dies ist nicht gut bekannt. Siehe auch: superuser.com/questions/148271/ps-command-in-solaris
Chris Quenelle
14

Der Kernel muss nicht die Befehlszeilenargumente verfolgen. Wenn ein Programm über den execveAufruf gestartet wird , muss der Kernel die Argumente in den Prozessspeicher kopieren (damit sie argvz. B. in einem C-Programm verfügbar sind ). Danach kann der Kernel den Speicher verwerfen, der zum Speichern der ursprünglichen Befehlszeilenargumente verwendet wird. Der Prozess darf seine Kopie der Argumente überschreiben. Von den Argumenten ist also möglicherweise einfach keine Spur zu sehen.

Einige Unix-Varianten behalten eine Kopie der Argumente in irgendeiner Form. Solaris macht einige Daten in verfügbar /proc/$pid. Ab OpenSolaris 2009.06 befinden sich die Argumente nur in einer Ablaufverfolgung /proc/$pid/psinfo, in der sie mit Leerzeichen dazwischen verkettet sind (Sie können also nicht zwischen foo "one" "two"und unterscheiden foo "one two") und die resultierende Zeichenfolge auf 80 Byte gekürzt wird. Dieses Feld in /proc/$pid/psinfogibt an, was psin der argsSpalte gedruckt wird.

Übrigens steuern die Optionen -fund -l, welche Felder gedruckt werden, und nicht, ob die Felder auf eine bestimmte Breite gekürzt werden.

Gilles 'SO - hör auf böse zu sein'
quelle
Dies war auch eine gute Antwort, sehr informativ. Der Befehl pargs hat meine Anforderungen besser erfüllt. Dies ist der einzige Grund, warum ich diese Antwort über diese Antwort ausgewählt habe.
gabe.
6
Also sitzen wir auch im Jahr 2013 hier und kürzen die Zeichenfolgen immer noch auf 80 Byte, weil wir in den 1970er Jahren nur 80-Zeichen-Terminals hatten und "einige" Programme noch nicht verstanden haben, dass das Leben weitergegangen ist. Und es gefällt uns, wir loben dies als "Kompatibilität"! Wir sollten uns schämen ...
Manjabes
1
@Manjabes haha! Leute, die sich weiterhin für Solaris entscheiden, sollten sich nicht darüber beschweren, dass das System Dinge auf eine altmodische Art und Weise ausführt. Wenn Sie ein Betriebssystem mit einer längeren ps-Auflistung und ausgefalleneren Funktionen in den Hilfsprogrammen wünschen, können Sie stattdessen Linux verwenden.
JohnGH
2

ps -egibt die Liste aller laufenden Prozesse an. Auch da ist das ps -elf.

ari
quelle
2
Selbst wenn Sie das Argument -l verwenden, werden die Befehlszeileninformationen immer noch abgeschnitten
Lars Nordin,
1
Keine Antwort auf die Frage.
Konrad Gajewski
0

Abhängig davon, welchen psBefehl Sie verwenden, verwende ich

ps -auxw
Wir s
quelle
1
Für die Version von ps unter Solaris, die auxw-Argumente verwendet, ist kein führendes '-' erforderlich. Wenn Sie nicht unter Solaris arbeiten, ist Ihre Antwort nicht relevant.
JohnGH
0

prstat Sie erhalten die aktuell ausgeführten Prozesse mit ihren Pids und der CPU-Auslastung.

user41052
quelle