LINUX.ORG.RU

Сохранение образа запущенной программы

 


0

1

Привет. Есть у нас некий запущенный процесс, мы хотим его завершить с сохранением текущего состояния на диск. Понятно, что любой процесс использует некоторые системные ресурсы. В общем неинтересна любая возня с самопальной прокладкой-менеджером системных ресурсов. Интересуюсь о наличии некоторой системной функции, которая сохранит занятое адресное пространство на диск, инфу об используемых ресурсах и тп, и позволит столь же просто восстановить предыдущее состояние через один вызов некой функции с файлом образом в качестве аргумента. Т.е. сохранять не снаружи ничего неподозревающей софтины хочу, а заюзать внутри собственного кода, ну это просто проще, если не заморачиваться с сохранением. Вроде никакого волшебства, все просто, может так можно?

★★

Ответ на: комментарий от Harald

Как вариант, ну это все же дамп образа снаружи. Мне просто кажется, что подобный функционал очень полезен и с большой вероятностью реализован в самом ядре и доступен через некий системный вызов.

pavlick ★★ ()
Ответ на: комментарий от pavlick

без ядра фича бы не работала, значит смотри исходники юзерспейса criu и ищи, где и как оно там ядро дёргает

Harald ★★★★★ ()

В Common Lisp так можно. И в некоторых ОС, отличных от Linux, вроде тоже можно. Единственное, что у задачи нет гладкого решения, поскольку твой процесс мог держать открытые файлы, и часть их быть забуферизована, в т.ч. в неявном виде, в виде состояния каких-то твоих парсеров. Есть большая вероятность, что после восстановления мир будет сильно другим.

den73 ★★★★★ ()

Ну да, просто. Просто храни все данные на диске, например. Вообще не надо сохранять.

ilovewindows ★★★★★ ()

Глянул бегло исходники crui. Дамп процесса там какая сложная многоходовка. Я вообще сомневаюсь, что она корректно обойдется с многопоточной софтиной. Может ошибся, конечно.

pavlick ★★ ()

мы хотим его завершить с сохранением текущего состояния на диск.

хватит изобретать велосипед. гибернейт или спящий режим для кого придумали?

darkenshvein ★★★★★ ()
Ответ на: комментарий от pavlick

сетевые соединения не поднимутся. за время спячки может пропасть видеокарта. поэтому обычно программе дают возможность встать на паузу, а затем продолжить работу. когда ты это допишешь, у тебя получится что-то вроде андроида.

anonymous ()

qemu + гибернация?

anonymous ()
Ответ на: комментарий от pavlick

Дамп процесса там какая сложная многоходовка. Я вообще сомневаюсь, что она корректно обойдется с многопоточной софтиной. Может ошибся, конечно.

Для CRIU и аналогов DMTCP, BLCR, OpenVZ заявлено «Multithread support»: CRIU: Comparison to other CR projects.

gag ★★★★★ ()

Спасибо. Я попробую заюзать CRIU, снаружи. Но честно говоря не понимаю почему данному вопросу не уделено достаточно внимания «ядром».

pavlick ★★ ()
Ответ на: комментарий от pavlick

Я попробую заюзать CRIU, снаружи.

Можно и изнутри: https://www.criu.org/C_API. Пример использования: https://github.com/checkpoint-restore/criu/blob/76db45331ce9cdb868161874f175bc75b570ea43/test/others/libcriu/test_self.c.

Но честно говоря не понимаю почему данному вопросу не уделено достаточно внимания «ядром».

Уделяется: https://www.criu.org/Upstream_kernel_commits. Но протолкнуть 100% очень-очень не просто, т.к. API для userspace не должно меняться.

gag ★★★★★ ()

Заверни софтину в виратулаку, и сохраняй-мигрируй сколько влезет. Остальные способы - костыльны.

snizovtsev ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.