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