Можно ли прервать процесс и проверить его, чтобы возобновить позже?

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

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

 kworr27 сент. 2013 г., 14:25
Помимо Linux, DragonflyBSD может делать это изначально: Dragonflybsd.org / особенности

Ответы на вопрос(5)

man kill

Прерывание процесса требует двух шагов:

Прекратит

kill -STOP <pid>  

а такж

Продолжит

kill -CONT <pid>

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

 Basile Starynkevitch08 мая 2012 г., 15:02
Это не проверяет процесс, просто останавливает и перезапускает его.

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

 Basile Starynkevitch08 мая 2012 г., 15:20
Не совсем, но посмотри мой ответ.
 masterxilo01 дек. 2016 г., 11:49
Этот ответ не является неправильным, так что давай: никаких отрицательных голосов. Образ процесса с контрольной точкой находится только в памяти (или в страничной памяти) и может быть возобновлен только в сеансе и оборудовании, которое его создало, но это удовлетворяет частям требований OP.
 pythonic08 мая 2012 г., 14:53
Можно ли перенести этот процесс на другую машину?

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

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

Решение Вопроса

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

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

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

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

Некоторые языки реализации и времени выполнения имеют контрольные точки примитивы. SBCL (бесплатная реализация Common Lisp) может сохранить основное изображение и перезапустите его позже. SML / NJ умеет экспортировать изображение. Писк (реализация Smalltalk) также имеет такую возможность.

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

Подробнее о ортогональное постоянство. Это также предмет исследования. Сериализации также имеет значение (и вы можете использовать текстовые форматы, такие как JSON, YAML, XML, ...). Вы также можете использовать Спячки методы (на уровне всей системы).

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

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

 Basile Starynkevitch08 мая 2012 г., 15:03
Это не проверяет процесс, просто останавливает и перезапускает его.

Ваш ответ на вопрос