2017-06-26 1 views
1

Ich rief ein Python-Skript (2.7) von einer Konsole (Ubuntu 14.04) mit einem Befehl: python script_name.py. Irgendwann wollte ich das laufende Skript stoppen, indem ich Strg-C drücke. Als ich jedoch Ubuntu System Monitor überprüfte, wurde der vom Python-Skript verwendete Speicher nicht freigegeben (ich überwachte Ubuntu System Monitor, bevor ich das Skript anrief, während des Vorgangs und nachdem ich Strg-C gedrückt hatte, um das Skript zu stoppen). Ich habe versucht, den Speicher freizugeben, der einen Befehl verwendet, der auf http://www.upubuntu.com/2013/01/how-to-free-up-unused-memory-in.html erklärt wird, aber nicht funktionierte (ich meine, die Speichernutzung wurde nicht geändert).Wie Ubuntu Speicher freizugeben, sobald Python-Skript vom Terminal (Ctrl-C) gestoppt wird?

Wenn ich jedoch pycharm zum Ausführen und Stoppen des Skripts verwendet habe, wurde der Speicher direkt freigegeben, sobald ich die Stop-Taste drücke. Aus irgendwelchen Gründen (wie von ssh oder einfach nur von der Konsole aus testen) möchte ich mein Skript von der Konsole ausführen (ohne pycharm oder andere IDEs zu verwenden).

Meine Frage ist, was ist der Befehl, oder wie zu beenden, Python-Skript ausführen und direkt den Speicher durch das Skript freigegeben, wenn ich das Skript von der Konsole aus ausführen?

Vielen Dank im Voraus.

+1

Python in C geschrieben ist, wenn der Interpreter läuft noch, dann könnte das relevant sein: [Werden malloc Implementierungen freien Speicher zurück an das System zurückgeben?] (https://stackoverflow.com/q/2215259/608639) PyCharm kann etwas anders aufgebaut sein und könnte sich aufteilen eine Kopie von sich selbst, um das Skript auszuführen, das schließlich beendet wird. – jww

+0

Danke, aber ich bin auf der Suche nach Unix/Linux Befehl, um den Prozess zu beenden und den Speicher direkt zu befreien. Aber deine Eingabe ist auch interessant! Vielen Dank! – Eduard

+0

Welcher Prozess? Du hast noch keinen ausführlich beschrieben. Vielleicht ist die Antwort ausführlich in [Wie kann ich sehen, welche Prozesse laufen?] (Https://unix.stackexchange.com/q/3340/56041) oder [Wie man einen Prozess abbricht, der in einem bestimmten Skript ausgeführt wird] (https://unix.stackexchange.com/q/151099/56041) von [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/). – jww

Antwort

0

Diese Befehle funktionierten nicht, da das, was Sie erreichen wollen, nicht das ist, was sie tun. Wie hast du den Speicher deines Python-Skripts überprüft? Ich benutze top, um Speicher zu sehen und könnte von jedem Prozess (in aufsteigender Reihenfolge standardmäßig sortiert) verwendet werden. Möglicherweise haben Sie überprüft, bevor das System Zeit hatte zu registrieren, dass der Python-Prozess wurde getötet, ich habe dies sehr oft verwendet und ich habe nie mit dem Betriebssystem nicht tun tun zurück Speicher, nachdem ein Prozess mit ctrl + c getötet wurde.

PyCharm wahrscheinlich macht einige Bereinigung, wenn Sie das Programm von es stoppen im Vergleich zu nur für das Betriebssystem warten, Speicher Versys zurückzufordern, wenn Sie einen Prozess von einem Shell-SigTerm

+0

Ich habe Ubuntu System Monitor (unter "Speicher" in "Memory and Swap History") verwendet. Ich kann sehen, dass eine Menge an Speicher verwendet (erhöht) wird, wenn ich das Skript ausführe (was normal ist), aber nachdem ich Ctrl-C im Terminal verwendet habe, ist "diese Menge an Speicher" immer noch da. Wenn ich Pycharm verwende, wird "diese Menge an Speicher" frei, nachdem ich die Stop-Taste gedrückt habe. Ich hatte "top" verwendet und der Prozess wurde abgebrochen, aber System Monitor zeigte immer noch, dass "diese Menge an Speicher" nicht freute. – Eduard

+0

Niemals den Systemmonitor verwendet. Wie oft hast du das versucht? Wenn Sie nur die gesamte Speicherauslastung betrachten, ist es möglich, dass ein anderer Prozess diese Speicherkapazität sofort aktiviert hat, sobald Python sie losgelassen hat (großer Zufall). Wenn es pro Prozess ist, dann ist es wahrscheinlich nur für eine Weile da, bis der Speicher in den freien Speicherpool des Betriebssystems zurückkehrt. –

+0

Nun, das OS scheint den Speicher nicht freizugeben, obwohl das Skript für eine Weile gestoppt wurde. Ich lief nur mein Skript (keine anderen Anwendungen liefen), und mein Skript benötigt einen großen Speicher, also jedes Mal, wenn ich meinen Linux neu starten muss (was ich nicht mag/nicht tun kann), um den Speicher vorher zurückzubekommen Ich könnte mein Skript erneut ausführen. Irgendwelche Befehle vom Terminal, um den Speicher freizugeben, der von meinem Python-Skript benutzt wurde (anscheinend funktionierte der Befehl von dem Link in meinem Beitrag nicht)? – Eduard

Verwandte Themen