2013-11-17 4 views
1

Мне нужно создать функциональность для моего проекта, например, сохранить сессию и продолжить ее возобновление с той же позиции в будущем. Поэтому мне нужно знать, как сохранить состояние процесса, а затем прочитать с диска и возобновить его после.Сохранение сеанса или состояния процесса в linux

PS. Приложение представляет собой интерактивную оболочку для языка, и мне нужно расширить ее, включая сеанс сохранения и возобновление сеанса. Но мы хотим, чтобы код был достаточно общим для использования в других местах.

+0

... и вопрос есть? – pfnuesel

+0

@pfnuesel вопрос, как сохранить состояние процесса в памяти, а затем возобновить его после чтения его из памяти. – bali

ответ

1

Это довольно сложная задача. Основная идея состоит в том, чтобы прерывать процесс с помощью сигнала, после чего ОС помещает состояние всех регистров (включая указатель инструкций) в память, где вы можете получить к ним доступ, если ваша оболочка породила процесс, который вы хотите прервать.

Для более подробной информации, вы можете посмотреть, как чекпойнтинг утилиты справиться с этой проблемой:

+0

Не могли бы вы объяснить это немного больше? – bali

+0

Нет ... Я знаю общую картину, но я не знаю деталей, следовательно, ссылки на рабочие реализации. Я знаю достаточно, чтобы использовать их, чтобы не объяснять подробно, как они работают. Извините – damienfrancois

0

Это довольно трудно ответить вообще, кроме « сохраните все состояние программы в файл и загрузите ее там после возобновления ». Это может быть очень сложно, потому что вам может потребоваться восстановить такие вещи, как дескрипторы файлов и сокеты, что может быть даже невозможно, если в процессе приостановления состояния ситуация изменилась. Но вам может быть достаточно, чтобы поддержать что-то меньшее, и сохранить информацию, необходимую для аппроксимации предыдущего состояния (например, сохранить список загружаемых файлов программы или сохранить историю команд пользователя и воспроизвести его и т. Д.).

+0

Повтор будет медленным. Это не поддержка Linux linux/unix. – bali

Смежные вопросы