В ходе разработки какого-либо приложения мы столкнулись с необходимостью получения полного дампа ядра без полной остановки выполнения программы.
Конечно, есть условия, которые генерируют дамп ядра, когда продолжение может быть небезопасно, но мы не говорим о повреждении памяти и тому подобное.
Я хочу послать сигнал программе и сгенерировать полное ядро без минимального влияния на выполнение программы.
Это возможно? Если так, как?
Посмотрите эту библиотеку Google, это может помочь: http://code.google.com/p/google-coredumper/
Библиотека coredumper может быть скомпилирована в приложения для создания
дампы ядра работающей программы — без прерывания.
Coredumpber для Linux и, очевидно, отличная идея, если это ваша ОС.
Для других подобных Posix систем что-то вроде этого должно работать нормально:
#include <stdlib.h>
#include <process.h>
// Fork and abort for a core dump. This process keeps running.
if (fork() == 0) abort();
Конечно, среда должна быть настроена на сброс ядра на SIGABRT
, Вы также можете попробовать raise(SIGTERM)
это как kill -9
,