Process

轉儲程序核心而不殺死程序

  • February 17, 2013

有沒有辦法在不實際殺死程序的情況下為程序獲取核心轉儲(或類似的東西)?我有一個在嵌入式系統上執行的多執行緒 python 程序。而且我希望能夠在正常條件下(即需要執行的其他程序)獲得程序的快照,但是我沒有足夠的記憶體來連接 gdb(或在 gdb 下執行)沒有 python 程序是唯一一個正在執行的人。

我希望這個問題是有道理的。

通常的技巧是讓一些東西(可能是一個類似的信號SIGUSR1)觸發程序到fork(),然後孩子呼叫abort()以使自己轉儲核心。

from os import fork, abort
(...)
def onUSR1(sig, frame):
   if os.fork == 0:
       os.abort

並在初始化期間

from signal import signal, SIGUSR1
from wherever import onUSR1
(...)
signal.signal(signal.SIGUSR1, wherever.onUSR1)

以這種方式使用,fork不會消耗太多額外的記憶體,因為幾乎所有的地址空間都將被共享(這也是生成核心轉儲的原因)。

曾幾何時,這個技巧被用於undump從核心轉儲生成執行檔以在復雜初始化後保存圖像的程序。emacs用於從temacs.

引用自:https://unix.stackexchange.com/questions/11185