Действительно ли возможно 'быть в спящем режиме' процесс в Linux? Точно так же, как ' в спящем режиме' в ноутбуке, я был бы для записи всей памяти, привыкшей процессом к диску, свободному RAM. И затем позже, я могу 'возобновить процесс', т.е., считав все данные из памяти и отложить его к RAM, и я могу продолжить свой процесс?
Это наиболее эффективно просто повторить массив назад.
Я не уверен, что решение Aaron делает это VI этот вызов коллекции. VReverse (Список);
Кто-нибудь знает?
Я использовал для поддержания CryOpid , который является программой, которая имеет именно то, о чем вы говорите. Он пишет содержимое адресного пространства программы, VDSO, ссылки на дескриптор файлов и состояний в файл, который позже может быть восстановлен. CryOPID начался, когда в самом Linux было никаких удобных крючков в Linux и не работало полностью от пользовательского пространства (на самом деле, он все еще работает, в зависимости от вашего дистрибутива / ядра / безопасности).
Проблемы были (действительно) розетки, в ожидании сигналов RT, многочисленные проблемы X11, реализацию Glibc Caching GetPid () среди многих других. Рандомизация (особенно VDSO) оказалась непреодолимой для немногих из нас, работающих над ним после того, как Бернард ушел от него. Однако это было весело и стало темой нескольких мастеров диссертации.
Если вы просто обдумываете программу, которая может сохранить свое запущенное состояние и повторно начать непосредственно в это состояние, ее далеко. Далеко .. Проще просто сохранить эту информацию из самой программы, возможно, при обслуживании сигнала.
Проблема восстанавливает потоки - файлы и сокеты - что программа открыта.
Когда вся ваша ОС гибернат, локальные файлы и такое, очевидно, могут быть восстановлены. Network Connections не, но затем код, который обращается к Интернету, обычно более ошибка проверки и таково и выживает условия ошибки (или должны).
Если вы выполнили запрограммированную службу поддержки (без поддержки приложений), как бы вы обрабатывали открытые файлы? Что если другой процесс доступа к этим файлам в промежуточном состоянии? ETC?
Сохранение состояния, когда программа не загружается, будет сложным.
Просто приостановит потоки и позволить ему поменяться на диск, будет иметь большой эффект?
или запустить программу на виртуальной машине и пусть VM обрабатывает подвеску.
Короткий ответ: «да, но не всегда надежно». Ознакомьтесь с CryoPID:
Наиболее распространенной проблемой действительно будет открытие файлов. CryoPID явно заявляет:
Открытые файлы и смещения восстанавливаются. Временные файлы, которые были не связаны и недоступны на файловые системы всегда сохраняются в изображение. Другие несуществующие файлы при возобновлении еще не восстановлены. Поддержка сохранения содержимого файла для такие ситуации планируются.
Эти проблемы также повлияют на TCP-соединения, хотя CryoPID поддерживает tcpcp для возобновления соединения.
Ctrl-Z Увеличивает шансы на страницы процесса будут поменяться, но он полностью не освобождает ресурсы процесса. Проблема с бесплатными ресурсами процесса состоит в том, что такие вещи, как ручки файлов, розетки - это ресурсы ядра, процесс использует процесс, но не знает, как сохраняться самостоятельно. Итак, Ctrl-Z так же хорош, как он получает.
Как отметили другие, для ОС трудно предоставить эту функциональность, поскольку приложение должно иметь некоторую ошибку, проверку встроенной для обработки сломанных потоков.
Однако на боковом примечании некоторые языки и инструменты программирования, которые используют виртуальные машины, явно поддерживают эту функциональность, такие как язык самопрограммирования .
Некоторые исследования контрольной точки/восстановления для Linux были проведены за 2,2 и 2,4 дня, но он так и не прошел прототип. Возможно (с оговорками, описанными в других ответах) для определенных значений возможного - я могу написать модуль ядра для этого, возможно. Но для общей ценности возможного (могу ли я сделать это из оболочки на коммерческом дистрибутиве Linux), это пока невозможно.
Ваш код будет работать, если вы добавите условия для проверки числовых значений, например:
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 .
Ответы, в которых упоминается ctrl-z
, на самом деле говорят об остановке процесса сигналом, в данном случае SIGTSTP
. Вы можете выдать сигнал остановки с помощью kill
:
kill -STOP <pid>
, что приостановит выполнение процесса. Это не освободит сразу используемую им память, но так как память нужна другим процессам, то память, используемая остановленным процессом, будет постепенно свопирована.
Когда вы захотите разбудить его снова, используйте
kill -CONT <pid>
Более сложные решения, такие как CryoPID, на самом деле нужны только в том случае, если вы хотите, чтобы остановленный процесс смог пережить выключение/перезапуск системы - похоже, вам это не нужно.
Типы данных примитивов не могут использоваться в качестве адресов памяти. Вот почему нам нужны обертки, которые служат местозаполнителями для примитивных значений. Эти значения затем могут быть мутированы и доступны, реорганизованы, отсортированы или рандомизированы.
-121--1349712- В Linux есть ctrl + z
, но я не уверен, что он предлагает указанные функции. Я подозреваю, что вы задали этот вопрос, так как он не
Короткий ответ: «да». Для начала рассмотрим некоторые идеи: ELF-реконструкция из основного образа ( http://vx.netlux.org/lib/vsc03.html )
Там Ctrl + Z
в Linux, но я не уверен, что он предлагает указанные вами функции. Я подозреваю, что вы задали этот вопрос, так как это не