gee*_*aur 16
通常的技巧是让某些东西(可能是类似 的信号SIGUSR1)触发程序到fork(),然后子进程调用abort()使自己转储核心。
from os import fork, abort
(...)
def onUSR1(sig, frame):
if os.fork == 0:
os.abort
Run Code Online (Sandbox Code Playgroud)
并在初始化期间
from signal import signal, SIGUSR1
from wherever import onUSR1
(...)
signal.signal(signal.SIGUSR1, wherever.onUSR1)
Run Code Online (Sandbox Code Playgroud)
以这种方式使用,fork不会消耗太多额外的内存,因为几乎所有的地址空间都将被共享(这也是生成核心转储的原因)。
曾几何时,这个技巧被用于undump从核心转储生成可执行文件以在复杂初始化后保存图像的程序。emacs过去常常这样做以从temacs.