2017-09-06 2 views
0

Ich versuche ein einfaches Skript zu schreiben, das die Speicherauslastung eines bestimmten Prozesses kontinuierlich überwacht. Also versuche ich, 'top' mit dem Befehl grep zu verwenden, um die Speichernutzung eines bestimmten Prozesses zu erfassen, sowie den Befehl free -m auszuführen und ihre Ausgaben in Textdateien zu schreiben.Parallele Ausführung von "top" - und "free-m" -Befehlen

top | grep --line-buffered -i process_name >> /home/output_txt1 & 
while (1) 
    free -m >> /home/output_txt2 
    sleep 2 
end & 

Allerdings, wenn ich die Befehle ausführen, bekomme ich

  • Suspended (tty Ausgang) nach oben | grep --line-gepufferte -i process_name >>/home/output_txt1 &

Was mache ich falsch und wie kann ich das umsetzen, was ich will? Ich weiß, dass ich auch "watch" benutzt habe, bevor ich die while-Schleife benutze und es hat auch nicht funktioniert.

+0

Von 'man top': -b: Batch-Modus-Betrieb Startet oben im" Batch-Modus ", was nützlich sein könnte, um Ausgaben von oben zu anderen Programmen oder zu einer Datei zu senden. In diesem Modus akzeptiert top keine Eingabe und wird ausgeführt, bis die Iterationsbeschränkung, die Sie mit der Befehlszeilenoption '-n' festgelegt haben, oder bis zum Abbruch ausgeführt wird. Sie können die Option -b ausprobieren. –

+0

Danke für den Tipp, ich habe -b und jetzt; top-Befehl funktioniert ohne Fehler. Allerdings, was ich von dem Skript beabsichtigte passiert nicht, ich finde, dass die Top-Befehl kontinuierlich laufen und korrekt in die Datei schreiben, während der "free-m" -Befehl nur einmal ausgeführt wird. Ist es etwa so, dass der "top" -Befehl den Prozess entführt und nicht erlaubt, dass die "while" -Schleife erneut ausgeführt wird? –

Antwort

0

Wie in meinem Kommentar gesagt, von man top:

-b: Batch-Modus-Betrieb Startet oben in âBatch Modea, die für das Senden von Ausgabe von oben nach anderen Programmen oder in eine Datei nützlich sein könnte. In diesem Modus akzeptiert top keine Eingabe und wird ausgeführt, bis die Iterationsbegrenzung, die Sie mit der Befehlszeilenoption â-nâ festgelegt haben, oder bis zum Abbruch ausgeführt wird.

und auch:

-n: Anzahl der Iterationen begrenzen: -n Nummer die maximale Anzahl von Iterationen Gibt oder Rahmen, oben vor dem Ende produzieren sollte.

Ich verstehe nicht genau das, was Sie tun wollen, aber Sie sollten überprüfen, ob die folgenden Skript Ihre Anforderungen erfüllen:

#!/bin/bash 

DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
OUT_TOP="${DIR}/out_top" 
OUT_FREE="${DIR}/out_free" 
echo "$(date) Reset" > "${OUT_TOP}" 
echo "$(date) Reset" > "${OUT_FREE}" 

while true 
do 
    date >> "${OUT_TOP}" 
    date >> "${OUT_FREE}" 
    top -b -n 1 | grep --line-buffered -i apache >> "${OUT_TOP}" 
    free -m >> "${OUT_FREE}" 
    sleep 2 
done 

Endlosschleife kommt von here.

Wenn ich getestet, gab es ein Ergebnis nahe, was Sie werden suchen können:

[so46072643] ./topandfree & 
[1] 27313 
[so46072643] sleep 8 
[so46072643] kill 27313 
[so46072643] for f in `ls ./out*`; do printf "\n%s\n<<--\n" $f; cat $f; echo "-->>"; done 

./out_free 
<<-- 
Wed Sep 6 12:54:54 CEST 2017 Reset 
Wed Sep 6 12:54:54 CEST 2017 
      total  used  free  shared buffers  cached 
Mem:   7985  6808  1177   0  263  1400 
-/+ buffers/cache:  5144  2840 
Swap:   8031  117  7914 
Wed Sep 6 12:54:56 CEST 2017 
      total  used  free  shared buffers  cached 
Mem:   7985  6808  1176   0  263  1400 
-/+ buffers/cache:  5145  2840 
Swap:   8031  117  7914 
Wed Sep 6 12:54:59 CEST 2017 
      total  used  free  shared buffers  cached 
Mem:   7985  6808  1176   0  263  1400 
-/+ buffers/cache:  5145  2840 
Swap:   8031  117  7914 
Wed Sep 6 12:55:01 CEST 2017 
      total  used  free  shared buffers  cached 
Mem:   7985  6808  1176   0  263  1400 
-/+ buffers/cache:  5144  2840 
Swap:   8031  117  7914 
Wed Sep 6 12:55:04 CEST 2017 
      total  used  free  shared buffers  cached 
Mem:   7985  6808  1177   0  263  1400 
-/+ buffers/cache:  5144  2840 
Swap:   8031  117  7914 
Wed Sep 6 12:55:06 CEST 2017 
      total  used  free  shared buffers  cached 
Mem:   7985  6808  1177   0  263  1400 
-/+ buffers/cache:  5144  2841 
Swap:   8031  117  7914 
[1]+ Terminated    ./topandfree 
-->> 

./out_top 
<<-- 
Wed Sep 6 12:54:54 CEST 2017 Reset 
Wed Sep 6 12:54:54 CEST 2017 
4747 apache 20 0 171m 2068 436 S 0.0 0.0 0:00.00 httpd 
4748 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4750 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4751 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4752 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4753 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4754 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4755 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
Wed Sep 6 12:54:56 CEST 2017 
4747 apache 20 0 171m 2068 436 S 0.0 0.0 0:00.00 httpd 
4748 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4750 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4751 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4752 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4753 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4754 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4755 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
Wed Sep 6 12:54:59 CEST 2017 
4747 apache 20 0 171m 2068 436 S 0.0 0.0 0:00.00 httpd 
4748 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4750 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4751 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4752 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4753 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4754 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4755 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
Wed Sep 6 12:55:01 CEST 2017 
4747 apache 20 0 171m 2068 436 S 0.0 0.0 0:00.00 httpd 
4748 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4750 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4751 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4752 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4753 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4754 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4755 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
Wed Sep 6 12:55:04 CEST 2017 
4747 apache 20 0 171m 2068 436 S 0.0 0.0 0:00.00 httpd 
4748 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4750 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4751 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4752 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4753 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4754 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4755 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
Wed Sep 6 12:55:06 CEST 2017 
4747 apache 20 0 171m 2068 436 S 0.0 0.0 0:00.00 httpd 
4748 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4750 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4751 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4752 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4753 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4754 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
4755 apache 20 0 171m 2072 440 S 0.0 0.0 0:00.00 httpd 
-->> 
[so46072643] 

Hoffe, es hilft.

+0

Ja, es funktioniert, vielen Dank. Der Fehler, den ich hatte, ist, dass ich "-b" verwendete, ohne das Argument "-n" zu verwenden. Also, der Top-Befehl hat den Prozess gekapert und nicht beendet, daher wurde der Befehl free -m nie ausgeführt. –

Verwandte Themen