[英]How can I inspect a linux process to determine how/when a process dies/terminates?
我有一個python irc bot ,我通過/etc/init.d/phenny start
以root身份/etc/init.d/phenny start
。 有時它會死掉,但似乎一夜之間就會發生。
我該怎么做才能檢查它並在文本文件中查看進程的狀態?
如果您對真正的低級流程活動感興趣,則可以在strace下運行python解釋器,並將標准錯誤重定向到文件。
如果您只對機器人崩潰時檢查python代碼感興趣,並且您在發生崩潰的源中有位置,則可以使用try
/ except
包裝該位置並在except
子句中使用break進入調試器 :
import pdb; pdb.set_trace()
但是,您可能需要以非守護進程模式運行機器人才能使用它。
如果您知道它仍在運行,則可以對其進行堆疊以查看其后退。 我不確定它會有多大用處,因為你會看到解釋器的調用堆棧。 您也可以像其他人提到的那樣嘗試strace或ltrace。
我還要確保在腳本運行的任何環境中,你已經設置了ulimit -c unlimited,以便在python完全崩潰的情況下生成核心。
我可能嘗試的另一件事是讓不等待孩子的父母執行此作業。 即使底層作業已退出,這也應該導致proc表項作為僵屍保留。
你可能想嘗試Python psutils ,這是我使用和工作的東西。
一個廉價的方法來獲得關於這個問題的一些額外線索將是開始與
/etc/init.d/phenny start 2>/tmp/phenny.out 1>&2
當它崩潰時,檢查/tmp/phenny.out的尾部是否有Python追溯。
如果您只需要驗證進程是否正在運行,則可以運行一個檢查命令輸出的腳本
ps ax | grep [p] henny
每隔幾秒鍾。 如果它是空的,那么顯然這個過程已經死了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.