我有一個python irc bot,我通過做/etc/init.d/phenny start
作爲根啓動。有時它會死亡,但它似乎在一夜之間發生。如何檢查Linux進程以確定進程何時/何時終止/終止?
我能做些什麼來檢查它並查看文本文件中的進程狀態?
我有一個python irc bot,我通過做/etc/init.d/phenny start
作爲根啓動。有時它會死亡,但它似乎在一夜之間發生。如何檢查Linux進程以確定進程何時/何時終止/終止?
我能做些什麼來檢查它並查看文本文件中的進程狀態?
如果您對真正低級別的進程活動感興趣,可以在strace下運行python解釋器,將標準錯誤重定向到文件。
如果你只在檢查Python代碼時,你的機器人崩潰興趣的話,你必須在碰撞發生源的位置,你可以用該位置與except
子句中try
/except
和break into the debugger:
import pdb; pdb.set_trace()
雖然你可能需要在非守護模式下運行你的殭屍工具。
如果您知道它仍然在運行,您可以將它堆疊起來以查看它的回傳。我不確定這將是多麼有用,因爲你會看到解釋器的調用堆棧。你也可以像別人提到的那樣嘗試strace或ltrace。
我也會確保在腳本運行的任何環境中,你已經設置了ulimit -c unlimited,以便在python中生成一個核心的時候它會徹底崩潰。
我可能會嘗試的另一件事是由不等待它的孩子執行此作業。這應該會導致proc表條目作爲殭屍存在,即使當潛在的工作已經退出時也是如此。
你可能想嘗試Python psutils,這是我已經使用和工作的東西。
一種廉價的方式來獲得有關該問題的一些額外的線索將開始phenny與
/etc/init.d/phenny start 2>/tmp/phenny.out 1>&2
當它崩潰,檢查/tmp/phenny.out的尾巴Python的回溯。
如果您只需要驗證進程正在運行,你可以只運行一個腳本來檢查命令
PS AX的輸出| grep [p] henny
每隔幾秒鐘。如果它是空的,那麼顯然這個過程是死的。