#process #coredump #process-migration
Вопрос:
Мне было интересно, можно ли сгенерировать файл «core», скопировать его на другую машину, а затем продолжить выполнение файла a core на этой машине?
Я видел утилиту gcore, которая создаст основной файл из запущенного процесса. Но я не думаю, что gdb может продолжить выполнение на основе основного файла.
Есть ли какой-нибудь способ просто сбросить кучу/стек и восстановить их позже?
Комментарии:
1. Какое это имеет отношение к C/C ?
2. Согласитесь с camh, пожалуйста, удалите ссылку на C/C . У вас может быть процесс, код которого полностью asm, и вопрос допустим.
Ответ №1:
это называется миграцией процессов.
mosix и openMosix раньше могли это делать. в настоящее время проще всего перенести целую виртуальную машину.
Ответ №2:
В современных системах, не из основного файла, нет, вы не можете. Для замораживания и восстановления отдельного процесса в Linux работают CryoPID и новая контрольная точка и перезапуск на основе ядра, но их возможности в настоящее время весьма ограничены. OpenVZ и другие программы, подобные виртуализации, могут заморозить и восстановить всю систему.
Ответ №3:
Также ознакомьтесь с проектом Condor. Кондор может сделать это и с параллельными заданиями. Condor также включает мониторы, которые могут автоматически переносить ваш процесс, когда некоторые, например, снова начинают использовать свою рабочую станцию. Он действительно предназначен для использования запасных циклов в сетевых средах.
Ответ №4:
В общем случае этого будет недостаточно, чтобы позволить произвольному процессу продолжаться на другой машине. В дополнение к состоянию кучи и стека также могут быть открыты дескрипторы ввода-вывода, выделенные аппаратные ресурсы и т. Д. И т. Д.
Вы можете либо явно написать свое программное обеспечение таким образом, чтобы оно сбрасывало состояние по сигналу, а затем возвращалось из сброшенного состояния, либо запустить свое программное обеспечение на виртуальной машине и перенести его на альтернативный хост — Xen и Vmware поддерживают как замораживание/восстановление, так и оперативную миграцию.
Тем не менее, CryoPID пытается сделать именно это и иногда преуспевает.
Ответ №5:
По состоянию на февраль 2017 года существует довольно стабильный и зрелый инструмент под названием CRIU, который зависит от обновлений ядра Linux, сделанных в версии 3.11 (как это было сделано в сентябре 2013 года, большинство современных дистрибутивов должны включать их в свои версии ядра).
Его можно установить с помощью aptitude, просто позвонив sudo apt-get install criu
.
Ответ №6:
В некоторых случаях это можно сделать. Например, частью процесса сборки Emacs является загрузка всех библиотек Lisp, а затем сброс образа памяти на диск для быстрой загрузки. Некоторые переводчики других языков тоже так делают (в основном я имею в виду реализации Lisp и Scheme). Однако они специально разработаны для такого рода использования, поэтому я не знаю, какие специальные действия они должны предпринять, чтобы это сработало.
Я думаю, что это было бы очень сложно сделать для случайной программы, но если вы написали структуру, в которой все объекты поддерживали сериализацию/десериализацию, вы можете затем сериализовать все объекты, используемые вашей программой, а затем отправить их в другое место и десериализовать их на другом конце.
Ответы других людей о виртуализации тоже на месте.
Ответ №7:
Зависит от машины. Это очень выполнимо, например, в очень маленькой встроенной системе. Я думаю, что это также в некоторой степени реализовано в кластерах Беовульфа и других суперкомпьютерных приложениях.
Ответ №8:
Есть много причин, по которым вы не можете легко делать то, что хотите. Например, когда вы восстанавливаете основной файл на другом компьютере, как вы разрешаете открытые дескрипторы файлов, которые вы обрабатывали? Как насчет сокетов, именованных каналов, семафоров или любого другого ресурса на уровне операционной системы? В принципе, если ваша система специально не предназначена для выполнения такой операции, вы не можете наивно сбрасывать основной файл и перемещать его на другую машину.
Ответ №9:
Я не верю, что это возможно. Однако вы, возможно, захотите изучить программное обеспечение для виртуализации, например Xen, которое позволяет замораживать и перемещать все системные образы с одной машины на другую.