Gibt es eine Möglichkeit, "top" zu bekommen, um genau einmal zu laufen und zu beenden?

13

Die Ausgabe des Shell-Befehls ist meiner topAnsicht nach eine einfache und vertraute Methode, um einen groben Überblick über den Zustand einer Maschine zu erhalten. Ich möchte die topAusgabe (oder etwas sehr Ähnliches) von einem winzigen Webserver auf einem Computer für grobe Überwachungszwecke bereitstellen.

Gibt es eine Möglichkeit, die Textausgabe genau einmal zu schreiben , ohne Zeichen zu formatieren? Ich habe es versucht:

(sleep 1; echo 'q') | top > output.txt

Dies scheint zu sein , nah an , was ich will, mit der Ausnahme , dass (1) es gibt keine Garantie , dass ich nicht mehr oder weniger als eine Bildschirmseite von Informationen und (2) erhalten Ich habe alle Terminal Formatierungszeichen auf Streifen aus.

Oder gibt es einen anderen topBefehl, der Informationen zur Arbeitsspeicher- / CPU-Auslastung / Betriebszeit auf Maschinen- und Prozessebene auflistet?

(Idealerweise würde ich eine Strategie lieben, die sowohl auf Linux als auch auf Mac OS X portierbar ist, da unsere Entwickler Macs verwenden und unsere Produktumgebung Linux ist.)

Mickalot
quelle

Antworten:

22

Unter Linux können Sie Folgendes versuchen:

top -bn1 > output.txt

Von man top:

-b : Batch-mode operation
            Starts top in 'Batch' mode, which could be useful for sending
            output from top to other programs or  to  a  file.   In  this
            mode, top will not accept input and runs until the iterations
            limit you've set with the '-n' command-line option  or  until
            killed.
....
-n : Number-of-iterations limit as:  -n number
            Specifies  the  maximum  number of iterations, or frames, top
            should produce before ending.

Versuchen Sie unter OS X Folgendes:

top -l 1

Von der oberen OSX-Hilfeseite :

 -l <samples>
              Use logging mode and display <samples> samples, even if 
              standard output is a terminal. 0 is treated  as  infinity.   
              Rather than redisplaying, output is periodically printed in 
              raw form. Note that the first sample displayed will have an 
              invalid %CPU displayed for each process,  as it is calculated 
              using the delta between samples.
cuonglm
quelle
Dies scheint genau die Antwort zu sein, nach der ich suchen würde, wenn topOS X das Flag -b unterstützen würde. :-( Leider nicht, und ich sehe keine Version von topHomebrew. Dies scheint genau die richtige Antwort für Linux zu sein,
obwohl
@ Mickalot: Siehe mein aktualisiertes. Kann man GNU top unter Mac OSX installieren?
Cuonglm
@ Gnuoc: /usr/bin/top -l 1unter OSX 10.9.4 ist perfekt ... danke! Was die Installation von GNU top angeht , könnte ich es auf meinem Computer installieren , aber ich müsste die anderen Entwickler davon überzeugen, es auf ihren Computern zu installieren, damit mein Code für sie funktioniert, also würde ich das lieber vermeiden. (Wenn es nicht über Homebrew verfügbar ist, wird es Widerstand geben.) Jetzt, da ich plattformbasiert wechseln werde, werde ich gierig sein ... kennen Sie ein Windows-Halbäquivalent, also diese Entwickler (wir haben es)? ein paar) können auch eine grobe status seite haben? (Wenn nicht, ist das in Ordnung, Ihre Antwort ist bereits super hilfreich!)
Mickalot
@ Mickalot: Beachten Sie den Hinweis aus der oberen Manpage von OSX. Beachten Sie, dass im ersten angezeigten Beispiel für jeden Prozess ein ungültiger Prozentsatz der CPU angezeigt wird, da er anhand des Deltas zwischen den Beispielen berechnet wird. . Unter Windows-Benutzern können Sie möglicherweise "cygwin"
cuonglm
@ Gnuoc Danke für den zusätzlichen Punkt. Ich nehme an, ich kann top -l 2die erste Seite der Proben tun und wegwerfen?
Mickalot
1

Um ähnliche Typennummern von einem Windows-System zu erhalten, sollten Sie sich Powershell ansehen.

Nur um eine Liste von Prozessen zu erhalten und zu betrachten get-process. Schauen Sie sich diese Referenz an .

Bei einigen weiteren Suchen wurde hier ein netter kleiner Befehl gefunden .

Was, wenn Sie aus der vorgestellten while-Schleife herausnehmen, für Ihre Bedürfnisse wäre:

ps | sort -desc cpu | select -first 30

psin Powershell ist ein Alias ​​für get-process.

Yuppers
quelle
Das hört sich nach einer guten Idee an! Ich werde einen meiner Windows-Kollegen
bitten