Есть ли способ получить дамп ядра (или что-то подобное) для процесса, фактически не убивая процессы? У меня есть многопоточный процесс Python, работающий на встроенной системе. И я хочу иметь возможность получить снимок процесса в нормальных условиях (то есть с другими процессами, необходимыми для запуска), но у меня недостаточно памяти для подключения GDB (или запустить его под GDB) без процесса Python быть единственным бегущим.
Я надеюсь, что этот вопрос имеет смысл.
Ответы:
Обычный трюк состоит в том, чтобы заставить что-то (возможно, похожий на сигнал
SIGUSR1
) вызвать программуfork()
, а затем дочерний процесс вызываетabort()
создание дампа ядра.и во время инициализации
Используемый таким образом,
fork
не будет занимать много дополнительной памяти, потому что почти все адресное пространство будет разделено (именно поэтому это работает для создания дампа ядра).Когда-то давно этот прием использовался с программой, вызываемой
undump
для генерации исполняемого файла из дампа ядра для сохранения образа после сложной инициализации;emacs
используется для создания предварительно загруженного изображения изtemacs
.источник
Вы можете попробовать использовать
gcore
. Это вариант для вас?источник