Как “быть в спящем режиме” процесс в Linux путем хранения его памяти к диску и восстановления его позже?

Действительно ли возможно 'быть в спящем режиме' процесс в Linux? Точно так же, как ' в спящем режиме' в ноутбуке, я был бы для записи всей памяти, привыкшей процессом к диску, свободному RAM. И затем позже, я могу 'возобновить процесс', т.е., считав все данные из памяти и отложить его к RAM, и я могу продолжить свой процесс?

93
задан jontro 10 March 2019 в 21:49
поделиться

10 ответов

Это наиболее эффективно просто повторить массив назад.

Я не уверен, что решение Aaron делает это VI этот вызов коллекции. VReverse (Список); Кто-нибудь знает?

-121--603191-

Я использовал для поддержания CryOpid , который является программой, которая имеет именно то, о чем вы говорите. Он пишет содержимое адресного пространства программы, VDSO, ссылки на дескриптор файлов и состояний в файл, который позже может быть восстановлен. CryOPID начался, когда в самом Linux было никаких удобных крючков в Linux и не работало полностью от пользовательского пространства (на самом деле, он все еще работает, в зависимости от вашего дистрибутива / ядра / безопасности).

Проблемы были (действительно) розетки, в ожидании сигналов RT, многочисленные проблемы X11, реализацию Glibc Caching GetPid () среди многих других. Рандомизация (особенно VDSO) оказалась непреодолимой для немногих из нас, работающих над ним после того, как Бернард ушел от него. Однако это было весело и стало темой нескольких мастеров диссертации.

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

52
ответ дан 24 November 2019 в 06:19
поделиться

Проблема восстанавливает потоки - файлы и сокеты - что программа открыта.

Когда вся ваша ОС гибернат, локальные файлы и такое, очевидно, могут быть восстановлены. Network Connections не, но затем код, который обращается к Интернету, обычно более ошибка проверки и таково и выживает условия ошибки (или должны).

Если вы выполнили запрограммированную службу поддержки (без поддержки приложений), как бы вы обрабатывали открытые файлы? Что если другой процесс доступа к этим файлам в промежуточном состоянии? ETC?

Сохранение состояния, когда программа не загружается, будет сложным.

Просто приостановит потоки и позволить ему поменяться на диск, будет иметь большой эффект?

или запустить программу на виртуальной машине и пусть VM обрабатывает подвеску.

13
ответ дан 24 November 2019 в 06:19
поделиться

Короткий ответ: «да, но не всегда надежно». Ознакомьтесь с CryoPID:

http://cryopid.berlios.de/

Наиболее распространенной проблемой действительно будет открытие файлов. CryoPID явно заявляет:

Открытые файлы и смещения восстанавливаются. Временные файлы, которые были не связаны и недоступны на файловые системы всегда сохраняются в изображение. Другие несуществующие файлы при возобновлении еще не восстановлены. Поддержка сохранения содержимого файла для такие ситуации планируются.

Эти проблемы также повлияют на TCP-соединения, хотя CryoPID поддерживает tcpcp для возобновления соединения.

12
ответ дан 24 November 2019 в 06:19
поделиться

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

-1
ответ дан 24 November 2019 в 06:19
поделиться

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

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

3
ответ дан 24 November 2019 в 06:19
поделиться

Некоторые исследования контрольной точки/восстановления для Linux были проведены за 2,2 и 2,4 дня, но он так и не прошел прототип. Возможно (с оговорками, описанными в других ответах) для определенных значений возможного - я могу написать модуль ядра для этого, возможно. Но для общей ценности возможного (могу ли я сделать это из оболочки на коммерческом дистрибутиве Linux), это пока невозможно.

0
ответ дан 24 November 2019 в 06:19
поделиться

Ваш код будет работать, если вы добавите условия для проверки числовых значений, например:

class Transaction < ActiveRecord::Base
    validates_presence_of :date
    validates_presence_of :name

    validates_numericality_of :charge, allow_nil: true
    validates_numericality_of :payment, allow_nil: true


    validate :charge_xor_payment

  private

    def charge_xor_payment
      unless charge.blank? ^ payment.blank?
        errors.add(:base, "Specify a charge or a payment, not both")
      end
    end

end
-121--803851-

Вы пытались уволить первого ответчика, когда текст становится неактивным, а не когда он становится активным?

-121--3414234-

Это своего рода конечная цель кластеризованной операционной системы. Мэтью Диллон прилагает много усилий, чтобы реализовать что-то подобное в своем проекте Dragonfly BSD .

0
ответ дан 24 November 2019 в 06:19
поделиться

Ответы, в которых упоминается ctrl-z, на самом деле говорят об остановке процесса сигналом, в данном случае SIGTSTP. Вы можете выдать сигнал остановки с помощью kill:

kill -STOP <pid>

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

Когда вы захотите разбудить его снова, используйте

kill -CONT <pid>

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

20
ответ дан 24 November 2019 в 06:19
поделиться

Типы данных примитивов не могут использоваться в качестве адресов памяти. Вот почему нам нужны обертки, которые служат местозаполнителями для примитивных значений. Эти значения затем могут быть мутированы и доступны, реорганизованы, отсортированы или рандомизированы.

-121--1349712-

В Linux есть ctrl + z , но я не уверен, что он предлагает указанные функции. Я подозреваю, что вы задали этот вопрос, так как он не

-121--773605-

Короткий ответ: «да». Для начала рассмотрим некоторые идеи: ELF-реконструкция из основного образа ( http://vx.netlux.org/lib/vsc03.html )

6
ответ дан 24 November 2019 в 06:19
поделиться

Там Ctrl + Z в Linux, но я не уверен, что он предлагает указанные вами функции. Я подозреваю, что вы задали этот вопрос, так как это не

-2
ответ дан 24 November 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: