Назад | Перейти на главную страницу

Неблокирующий дамп ядра в Linux?

Я ищу способ сделать ненавязчивый дамп ядра запущенного процесса в Linux.

Я знаком с gdb gcore, но это можно запустить, только когда gdb присоединен к процессу и остановлен для отладки. Для большого дампа ядра это может означать много секунд или даже несколько минут прерванного выполнения.

Есть ли неблокирующая альтернатива?

Linux поддерживает память с функцией копирования при записи, от которой зависит fork() без exec(). Итак, я думаю о чем-то на уровне ядра, где ядро ​​делает снимок копии при записи таблиц страниц процесса сбрасываемого процесса, а затем записывает ядро, пока исходный процесс продолжает работать.

Я почти уверен, что смогу использовать gdb заставить fork() затем сбросьте ребенка, пока родитель счастливо продолжает, затем wait() в родительском, чтобы пожать ребенка после завершения. Однако это беспорядочно, и по-прежнему требуется два прерывания родительского процесса, хотя и короткие.

Неужто кому-то это было нужно раньше?

Google CoreDumper приходит на ум. Он делает копию адресного пространства процесса "копирование при записи", см. WriteCoreDump () (см. «Примечания»).