Quiero poder generar un volcado del núcleo pero no salir del proceso después. No lo necesito para continuar con la ejecución, solo para no morir. Este es un proceso Ubuntu C++.
Creo que estoy descargando el núcleo de una manera bastante estándar: capto la señal infractora configurando el controlador de señal con la señal (), establezco el límite de tamaño del núcleo a través de setrlimit () y luego solicito el volcado del núcleo con la señal () y aumentar():
signal(SIGSEGV, OnPosixSignal); ... void OnPosixSignal(int iSignal) { struct rlimit CoreLimit; CoreLimit.rlim_cur = RLIM_INFINITY; CoreLimit.rlim_max = RLIM_INFINITY; setrlimit(RLIMIT_CORE, &CoreLimit); signal(iSignal, SIG_DFL); raise(iSignal); }¿Hay algo que pueda hacer para que el proceso no se cierre después de descargar el núcleo?
¡Muchas gracias de antemano!
También puedes hacerlo usando gcore :
Genere un volcado del núcleo de un programa en ejecución con el ID de proceso pid. El archivo producido es equivalente a un archivo central producido por el kernel como si el proceso fallara (y si se usara "ulimit -c" para configurar un límite de volcado de núcleo apropiado). A diferencia de después de un bloqueo, después de gcore, el programa sigue ejecutándose sin ningún cambio.