19

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

Я знаю , что часть CPU достижима с помощью SIGSTOP и SIGCONT сигналов , но возможно на страницу отказ (своп-аут в случае процесса грязных страниц) сразу же частный RSS память о (остановленном) процессе?

1 ответ1

11

Вы можете изучить технику, называемую контрольная точка / восстановление. Это позволит вам запустить запущенный процесс и сохранить его состояние в виде набора файлов, а затем восстановить его позднее.
Чтобы использовать его, начните с установки программы criu [ git, wiki ] (yum install criu или apt install criu).

Для проверки работающего процесса создайте пустой каталог для хранения его файлов и перейдите в этот каталог.

mkdir /var/tmp/checkpoint
cd /var/tmp/checkpoint

Теперь проверьте работу запущенного процесса. В этом случае я использую --shell-job, так как мой процесс выполняется в оболочке со связанным tty.

criu dump -t 404 --shell-job

404 - это pid процесса, который я хочу проверить. Когда я делаю это, я вижу, что мой запущенный процесс уничтожается, а в моем каталоге /var /tmp /checkpoint заполняется набор файлов, необходимых для его восстановления.

Чтобы восстановить процесс, я должен убедиться, что нахожусь в каталоге с файлами контрольных точек и выполнить восстановление.

cd /var/tmp/checkpoint
criu restore --shell-job

Процесс запустится с того места, где остановился в терминале, где он был запущен. Если я остановлю этот запущенный процесс и criu restore --shell-job , процесс вернется к контрольной точке и снова запустится.

Надеюсь это поможет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .