Я шукаю спосіб взяти ненав'язливу кореневу систему запущеного процесу в Linux.
Я знайомий з gdb gcore
, але це може бути запущено лише тоді, коли gdb
він додається до процесу, і він зупинений для налагодження. Для великого дампу ядра, який може означати багато секунд, а то й декілька хвилин, перерваного виконання.
Чи є альтернатива, що не блокує?
Linux підтримує пам'ять копіювання при записі, на яку вона покладається fork()
без підтримки exec()
. Тому я думаю про щось на рівні ядра, де ядро робить знімок під час копіювання таблиць сторінок процесу процесу, який скидається, а потім записує ядро, поки початковий процес продовжує працювати.
Я впевнений, що я міг би використати gdb
для того, щоб примусити fork()
дитину потім скинути дитину, поки батько веде себе щасливо, а потім wait()
у батька, щоб пожинати дитину після закінчення. Це безладно, але все ж вимагає двох перерв батьківського процесу, хоч і коротких.
Напевно, комусь це було потрібно раніше?