Xatory
@Xatory
программист в основном веб

Как «заморозить» процесс и сохранить его состояние на диск?

Думаю, тем, кто пользовался кнопкой "Save the machine state" в Virtualbox или аналогичными путями отправки в спячку виртуальной машины, вопрос будет понятнее. Такой трюк позволяет выгрузить из памяти всю виртуальную машину и потом восстановить так, что для машины не пройдёт и секунды...
Интересует возможность сделать то же самое только с процессом (или несколькими за раз):
1. Остановить процесс (поставить на паузу)
2. Сохранить его состояние на диск (используемые данные в ОЗУ, дескрипторы файлов и т.д.)
3. Выгрузить процесс
4. По прошествии какого-то времени, загрузить все эти данные обратно в память и снять процесс с паузы

Подобный трюк проделывает режим гибернации в современных ОС, но он опять же сохраняет состояние всей системы, да и выключает питание.
Если есть какие-то коробочные варианты (программы), куски кода на любых языках, знания о подходящих функциях в ядре ОС - напишите, пожалуйста, здесь!
Желательно для Linux, но не откажусь и от Windows решений... Mac OS мне не пригодиться, но может быть кому-нибудь будут нужны :)
  • Вопрос задан
  • 5599 просмотров
Решения вопроса 2
Deerenaros
@Deerenaros
Программист, математик, задрот и даже чуть инженер
Раз два три

UPD.
Перечитал вопрос и стоит добавить, что шиндошс такой роскоши не позволяет. То есть, с оговорками, но вот здесь моё замечание @begemot_sun актуальнее некуда - слишком дорого.
Ответ написан
Комментировать
@grinds
criu.org/Main_Page

Немного о продукте можно послушать в 403 выпуске радиота.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
begemot_sun
@begemot_sun
Программист в душе.
Невозможно.

Почему?
1. В случае вирт машины вы сохраняете полностью её состояние в том числе состояние вирт переферии и т.п. т.е. для вирт машины нет глобального состояния, которое не может быть сохранено.
2. В случае гибернации все тоже самое, система сама по себе сохраняет своё состояние + состояние процессов, т.е. опять же нет глобального состояния, которое не сохраняется (переферии также сохранять не нужно, т.к. ОС сама инициализирует её в момент старта
3. В случае одного процесса, мы имеем не только состояние процесса, но и всякие дескрипторы ОС, которые использует процесс, взаимодействуя как с ОС так и с другими процессами. Их сохранить не получится, потому что на момент пробуждения такого процесса, состояние ОС и других процессов будет необратимо изменено.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы