Process
轉儲程序核心而不殺死程序
有沒有辦法在不實際殺死程序的情況下為程序獲取核心轉儲(或類似的東西)?我有一個在嵌入式系統上執行的多執行緒 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
.