簡體   English   中英

如何檢查Linux進程以確定進程終止/終止的方式/時間?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM