Как «заморозить» процесс и сохранить его состояние на диск?
Думаю, тем, кто пользовался кнопкой "Save the machine state" в Virtualbox или аналогичными путями отправки в спячку виртуальной машины, вопрос будет понятнее. Такой трюк позволяет выгрузить из памяти всю виртуальную машину и потом восстановить так, что для машины не пройдёт и секунды...
Интересует возможность сделать то же самое только с процессом (или несколькими за раз):
1. Остановить процесс (поставить на паузу)
2. Сохранить его состояние на диск (используемые данные в ОЗУ, дескрипторы файлов и т.д.)
3. Выгрузить процесс
4. По прошествии какого-то времени, загрузить все эти данные обратно в память и снять процесс с паузы
Подобный трюк проделывает режим гибернации в современных ОС, но он опять же сохраняет состояние всей системы, да и выключает питание.
Если есть какие-то коробочные варианты (программы), куски кода на любых языках, знания о подходящих функциях в ядре ОС - напишите, пожалуйста, здесь!
Желательно для Linux, но не откажусь и от Windows решений... Mac OS мне не пригодиться, но может быть кому-нибудь будут нужны :)
UPD.
Перечитал вопрос и стоит добавить, что шиндошс такой роскоши не позволяет. То есть, с оговорками, но вот здесь моё замечание @begemot_sun актуальнее некуда - слишком дорого.
Почему?
1. В случае вирт машины вы сохраняете полностью её состояние в том числе состояние вирт переферии и т.п. т.е. для вирт машины нет глобального состояния, которое не может быть сохранено.
2. В случае гибернации все тоже самое, система сама по себе сохраняет своё состояние + состояние процессов, т.е. опять же нет глобального состояния, которое не сохраняется (переферии также сохранять не нужно, т.к. ОС сама инициализирует её в момент старта
3. В случае одного процесса, мы имеем не только состояние процесса, но и всякие дескрипторы ОС, которые использует процесс, взаимодействуя как с ОС так и с другими процессами. Их сохранить не получится, потому что на момент пробуждения такого процесса, состояние ОС и других процессов будет необратимо изменено.
Как говориться, нет ничего невозможного... Поэтому никогда не говори "невозможно". В крайнем случае лучше - не по карману, и то здесь тоже не тот случай.
Теоретически если упаковать все файловые дескрипторы в имена файлов, пройти по всем участкам памяти... мда и правда очень дорого. Быть может если запускать процесс в отдельном процессе, который бы сам выделял память и дескрипторы - тогда было бы проще. Ну а уж с сетевыми подключениями вообще неясно что делать. Ведь их состояние уже никак не сохранить.