Неблокирующий дамп ядра в Linux?
Я ищу способ взять ненавязчивый coredump запущенного процесса в Linux.
Я знаком с GDB gcore
, но это можно запустить только тогда, когда gdb
присоединен к процессу и остановлен для отладки. Для большого дампа ядра это может означать много секунд или даже несколько минут прерванного выполнения.
Есть ли неблокирующая альтернатива?
Linux поддерживает память копирования при записи, которую он поддерживает fork()
без exec()
, Итак, я думаю о чем-то на уровне ядра, где ядро делает моментальный снимок "копировать при записи" таблиц страниц процесса, для которого создается дамп, а затем записывает ядро, пока исходный процесс продолжает работать.
Я уверен, что мог бы использовать gdb
заставить fork()
затем бросить ребенка, в то время как родитель продолжает счастливо, затем wait()
в родителя пожать ребенка после увольнения. Это грязно, хотя и все еще требует двух прерываний родительского процесса, хотя и коротких.
Конечно, кому-то это нужно было раньше?
1 ответ
На ум приходит Google CoreDumper. Он создает копию адресного пространства процесса при записи, см. WriteCoreDump () (см. "Примечания").