Есть ли способ сделать снимок запущенного процесса на диск, чтобы восстановить его позже?

3996
Sijin

Я обычно работаю со многими экземплярами Visual Studio, открытыми для разных проектов, мне было интересно, есть ли способ сделать снимок / спящий режим запущенного процесса на диск вместо того, чтобы закрывать его, чтобы я мог открыть его в том же состоянии, в котором он был быстро.

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

10
+1: интересная идея! (Конечно, это именно то, что менеджер виртуальной памяти пытается сделать для вас автоматически по мере необходимости.) Andy 14 лет назад 0
FWIW, что-то вроде этого ("unexec", основанное на дампе ядра) традиционно является частью процесса сборки Emacs в системах UNIX. См., Например, http://www.xemacs.org/Architecting-XEmacs/unexec.html coneslayer 14 лет назад 2
Что специально для emacs было разработано? Интересно, можно ли написать версию общего назначения? Andy 14 лет назад 1
Я искал что-то подобное уже довольно давно. Это особенно поможет, если вы хотите приостановить видео кодер! Breakthrough 14 лет назад 0
Похоже, что для Linux есть что-то подобное linux.org/apps/AppId_2488.html Однако я думаю, что проблема будет в открытых дескрипторах файлов, сетевых сокетах и ​​т. Д., Которые делают эту проблему нетривиальной Sijin 14 лет назад 1
Да, для надлежащего восстановления состояния потребуется знание того, как работает программа. Например, процесс предполагает, что заблокированные файлы не будут изменены с момента последней их проверки. Если вы убьете процесс так, чтобы блокировки больше не было, а файл затем был изменен чем-то другим, то просто восстановление дескриптора и блокировка позже оставят программу в недопустимом состоянии. Или, что проще для понимания, сетевой сокет дошел до состояния, в котором он находился, общаясь с сервером. Ваш инструмент восстановления должен был бы знать, как сокет достиг состояния, в котором он находится - это может быть невозможно, например, с помощью TLS. binki 8 лет назад 0

3 ответа на вопрос

3
Incognito

Я делаю это, используя VirtualBox от Sun для разделения проектов. Это также удобно, потому что вы можете делать снимки.

Недостаток в том, что вам нужно поставить туда целую ОС.

Да, я использую VirtualBox для снимков уровня ОС, вот где у меня появилась идея для снимка уровня приложения. Похоже, что для Linux есть нечто подобное http://www.linux.org/apps/AppId_2488.html. Однако я думаю, что проблема заключается в дескрипторах открытых файлов и т. Д., Которые делают эту проблему нетривиальной. Sijin 14 лет назад 2
1

ProcessExplorer от MS Sysinternals позволяет приостановить процесс. это помогает / делает работу?

Unfortunately not... I wanted to take the process out of memory in order to free it up, not simply pause the application. Although this IS a very useful program for CPU intensive applications that you may need to pause! Breakthrough 14 лет назад 4
Приостановка процесса эффективно останавливает все другие процессы, которые отправляют ему сообщения Windows. Бывает так, что некоторым процессам нравится отправлять сообщения другим процессам, а некоторым процессам нравится быть целью таких трансляций. Таким образом, приостановка некоторых процессов безвредна, но в других случаях это помешает вашей работе с компьютером. И еще кое-что. Некоторые процессы, после возобновления длительной приостановки, будут зависать и использовать весь ваш процессор, чтобы компенсировать все потерянное время, вычисляя что-то очень умное: P Roland Pihlakas 11 лет назад 0
Существует также утилита командной строки ** pssuspend ** от MS Sysinternals. Вы можете найти его там: http://technet.microsoft.com/en-us/sysinternals/bb897540. Он является частью пакета PsTools: http://technet.microsoft.com/en-us/sysinternals/bb896649, где вы также можете найти, например, инструмент ** pskill **, который, например, довольно удобен после возобновления процесса. и это случается слишком взволнованным. Roland Pihlakas 11 лет назад 0
@Breakthrough, но если процесс приостановлен, он откажется от памяти (так как другие программы используют память, они заставят эту страницу выгружаться), даже не пытаясь восстановить ее, пока вы не возобновите ее. Это действительно самый близкий / самый безопасный способ получить то, что вы хотите - замененная приостановленная программа, по сути, представляет собой надежно сохраненный моментальный снимок, который теряется при перезагрузке. binki 8 лет назад 1
-1
Simon D.

Вы можете использовать WinDbg (инструмент Microsoft), чтобы создать дамп текущего состояния компьютера с Windows. Обычно это используется для анализа проблем, но, возможно, это также может удовлетворить ваши потребности. Поиск по ключевым словам WinDbg и дамп для получения дополнительной информации, может быть, есть даже вариант, чтобы сбросить только отдельные процессы.

Файл дампа не может быть использован для восстановления процесса. user2284570 8 лет назад 0