2017-06-26 158 views
1

我使用命令從控制檯(Ubuntu 14.04)調用python腳本(2.7):python script_name.py。在某些時候,我想通過按Ctrl-C來停止正在運行的腳本。但是,當我檢查Ubuntu系統監視器時,python腳本使用的內存沒有被釋放(我在調用腳本之前監視了Ubuntu系統監視器,在此過程中以及按Ctrl-C停止腳本之後)。我嘗試使用在http://www.upubuntu.com/2013/01/how-to-free-up-unused-memory-in.html上解釋的命令釋放內存,但沒有奏效(我的意思是內存使用沒有改變)。一旦python腳本從終端(Ctrl-C)停止,如何釋放Ubuntu內存?

但是,如果我使用pycharm來運行並停止腳本,一旦按下「停止」按鈕,內存就會直接釋放。出於某些原因(例如從ssh或僅僅從控制檯進行測試),我想從控制檯運行我的腳本(不使用pycharm或任何其他IDE)。

我的問題是,如果我從控制檯運行腳本,命令是什麼,或者如何停止運行python腳本並直接釋放腳本使用的內存?

非常感謝提前。

+1

Python是用C寫的SIGTERM的過程如果解釋爲仍然在運行,那麼這可能是相關的:[malloc實現是否將釋放的內存返回給系統?](https://stackoverflow.com/q/2215259/608639)PyCharm的架構可能有點不同,並且可能fork自己的副本來運行最終退出的腳本。 – jww

+0

謝謝,但我正在尋找Unix/Linux命令來終止進程並直接釋放內存。但是你的意見也很有趣!謝謝! – Eduard

+0

哪個過程?你還沒有詳細說明。也許答案在[如何查看正在運行的進程?](https://unix.stackexchange.com/q/3340/56041)或[如何殺死在特定腳本中運行的進程](https://unix.stackexchange.com/q/151099/56041)來自[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)。 – jww

回答

0

這些命令不起作用,因爲你試圖達到的不是他們所做的。你是如何檢查你的Python腳本使用的內存的?我使用top來查看內存,並可以由每個進程使用(默認情況下按升序排序)。在系統有時間註冊之前,您可能已經檢查過python進程是否已被殺死,我已經使用了很多,並且我從來沒有在操作系統沒有在使用ctrl + c殺死一個進程後沒有回憶回內存。

Pycharm可能做一些清理工作,當你從它停止程序而不是隻需要等待操作系統回收內存versys當你從一個shell

+0

我使用了Ubuntu系統監視器(在「內存和交換歷史」中的「內存」下)。當我運行腳本時(這是正常的),我可以看到大量內存被使用(增加),但是在終端中使用Ctrl-C之後,「內存量」仍然存在。如果我使用了Pycharm,按下「停止」按鈕後,「內存量」就會被釋放。我已經使用'頂部',並且這個過程被殺死了,但是系統監視器仍然顯示「那個內存量」並沒有被激化。 – Eduard

+0

從未使用過系統監視器。你嘗試過多少次?如果你只是在看內存使用的總量,那麼可能有另一個進程只要Python釋放內存就可以捕獲該內存(需要很大的巧合)。如果是每個進程,那麼它可能只是暫時存在一段時間,直到內存回到操作系統的可用內存池中。 –

+0

好吧,即使腳本已經停止了一段時間,操作系統似乎也不會釋放內存。我只運行我的腳本(沒有其他應用程序正在運行),並且我的腳本需要大量內存,所以每次必須重新啓動我的linux(這是我不喜歡/不能做的),以便在重新獲得內存之前我可以重新運行腳本。任何命令從終端釋放我的Python腳本使用的內存(顯然是從我的文章中的鏈接命令不起作用)? – Eduard