¿Hay alguna manera de obtener un volcado de núcleo (o algo similar) para un proceso sin realmente matar los procesos? Tengo un proceso de Python multiproceso que se ejecuta en un sistema integrado. Y quiero poder obtener una instantánea del proceso en condiciones normales (es decir, con los otros procesos necesarios para ejecutarse), pero no tengo suficiente memoria para conectar gdb (o ejecutarlo bajo gdb) sin el proceso de Python siendo el único corriendo
Espero que esta pregunta tenga sentido.
Respuestas:
El truco habitual es hacer que algo (posiblemente una señal como
SIGUSR1
) active el programafork()
, luego el niño llamaabort()
para volcarse el núcleo.y durante la inicialización
Si se usa de esta manera,
fork
no se consumirá mucha memoria adicional porque se compartirá casi todo el espacio de direcciones (razón por la cual esto también funciona para generar el volcado del núcleo).Érase una vez este truco se usó con un programa llamado
undump
para generar un ejecutable desde un volcado de núcleo para guardar una imagen después de una inicialización compleja;emacs
solía hacer esto para generar una imagen precargada detemacs
.fuente
Puedes intentar usarlo
gcore
. esa es una opción para ti?fuente