Answers:
通常的技巧是让某物(可能是信号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
。
您可以尝试使用gcore
。那是您的选择吗?