Дамп ядра Linux без уничтожения процесса

Можно ли создать дамп ядра, не убивая процесс? Если да, то какая команда/сигнал для этого?

Спасибо, Джим


person Jim    schedule 11.06.2010    source источник


Ответы (3)


См. команду «gcore», часть GDB.

person janneb    schedule 11.06.2010
comment
Это выглядит многообещающе. Я получил основной файл таким образом. Однако процесс, который я анализирую, завершается, как только я отсоединяю от него gdb. Он также немедленно прекращается, если я его назначаю. Знаете ли вы какой-либо способ предотвратить обнаружение присоединения с помощью gdb/strace? Спасибо еще раз! - person Jim; 12.06.2010
comment
Вы можете запустить gcore для процесса, а затем gdb для дампа ядра. Нравится: gcore 12345; gdb /path/to/binary core.12345 - person ; 12.09.2013

Мне больше всего удалось подключить gdb в пакетном режиме к работающей программе, получить обратную трассировку и затем отсоединить.

gdb --batch --quiet -ex "set pagination off" -ex "thread apply all bt"
-ex "detach" -ex "quit" pid pid_of_process
person bluepin    schedule 16.11.2011
comment
но backtrace не является дампом ядра - person osgx; 17.11.2011

Здесь описан способ создания дампа памяти напрямую из программы без gdb: https://unix.stackexchange.com/questions/11185/dump-process-core-without-killing-the-process

Это имеет смысл только в том случае, если вы развиваетесь. Принцип состоит в том, чтобы разветвить программу и поднять SIGABRT из дочернего элемента.

person Jérôme Pouiller    schedule 03.06.2016