2012-05-08 3 views
3

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

Особенно меня интересует способ, при котором приложение может быть остановлено и перезапущено на другой машине. Это тоже возможно?

+0

Кроме Linux DragonFlyBSD может сделать это изначально: HTTP: // WWW .dragonflybsd.org/features/ – kworr

ответ

5

В общих чертах контрольная точка процесса не является полностью возможной (поскольку процесс является не только адресным пространством, но также имеет другие ресурсы, как файловые дескрипторы и сокеты TCP/IP ...).

На практике вы можете использовать некоторые библиотеки контрольных точек, такие как BLCR и т. Д. С определенными предельными условиями вы можете перенести изображение контрольной точки из одной системы в другую (очень похоже на исходную: одно и то же ядро, те же версии библиотек & составителей и т. д.).

Миграция изображений также возможна на уровне virtual machine. Некоторые из них неплохо подходят для этого.

Вы также можете проектировать и реализовывать свое программное обеспечение с помощью собственного контрольно-измерительного оборудования. Затем вы должны подумать об использовании методов и терминологии garbage collection. Посмотрите также на Emacs (или Xemacs) unexec.c файл (который сильно зависит от машины).

Выполнение некоторых языков & Среда выполнения имеет контрольные точки. SBCL (бесплатная реализация Common Lisp) способна к save a core image и перезапустить его позже. SML/NJ способен export an image. Squeak (реализация Smalltalk) также имеет такую ​​способность.

Как другой пример контрольной точки, компилятор GCC фактически может скомпилировать один заголовок *.h (в предварительно скомпилированный заголовочный файл, который является постоянным изображением кучи GCC), используя persistence techniques.

Подробнее о orthogonal persistence. Это также предмет исследования. serialization также применим (и вы можете использовать текстовые форматы à la JSON, YAML, XML, ...). Вы также можете использовать методы hibernation (на всем уровне системы).

2

Тип: Control + Z приостановить процесс (он посылает SIGTSTP)

затем bg/fg возобновить ее в фоновом режиме или на переднем плане

+0

Это не контрольный пункт процесса, просто останавливает и перезапускает его. –

3

от человека страниц man kill

Прервав процесс требует два этапа:

Остановить

kill -STOP <pid> 

и

Чтобы продолжить

kill -CONT <pid> 

Где <pid> это процесс идентификатор.

+0

Это не контрольный пункт процесса, просто останавливается и перезапускает его. –

0

На linux можно получить отправку этого сигнала STOP процесса. Leter вы возобновите его, отправив сигнал CONT. Пожалуйста, обратитесь к руководству по уничтожению.

+0

Можно ли передать этот процесс другому компьютеру? – pythonic

+0

Не в общем, но см. Мой ответ. –

+0

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

1

Checkingpointing индивидуальный процесс принципиально невозможно на POSIX. Это потому, что процессы не являются независимыми; они могут взаимодействовать. Если ничего другого, процесс имеет уникальный идентификатор процесса, который он мог бы хранить где-то внутри, и если вы возобновите его с помощью другого идентификатора процесса, все ад может сломаться. Это особенно верно, если в процессе используются какие-либо примитивы блокировок/синхронизации. Конечно, вы также не можете возобновить процесс с тем же идентификатором процесса, который он изначально имел, поскольку это может быть принято новым процессом.

Может быть, вы могли бы решить эту проблему, делая процесс (ниткой) Идентификаторы 128-бит или так, таким образом, что они универсально уникальный ...