Я запускаю команду на сервере. Она идет с этой библиотекойhttp://www.graphicsmagick.org/.
По сути, у меня есть цикл for, который выполняет обработку изображений во многих файлах.
Команда выполняется часами и будет выполняться часами. Интересно, могу ли я выйти из ssh и оставить эти команды запущенными на удаленной машине? Посылает ли выход из ssh какой-либо сигнал для завершения выполнения текущей команды?
Еще одна вещь, которую я заметил..Хотя я запускаю команду удаленно, мой ноутбук перегревается. Монитор активности показывает, что bash использует 70% процессора. Я на macbook pro
Вот это странно. Как удаленная команда может вызвать нагрузку на локальную машину?
решение1
Одним из решений является добавление к команде префикса nohup
. Это сообщает компьютеру, что нужно игнорировать сигналы «hangup» (например, выход из сеанса ssh). Это МОЖЕТ НЕ РАБОТАТЬ с for
циклами.
Другое хорошее решение (и мой личный любимый способ сделать это) — установить пакет «screen». screen
предоставляет виртуальный терминал, от которого можно отключиться, оставив процессы запущенными, нажав CTRL + A , D
. Затем экран можно будет снова подключить позже с помощью screen -r
.
решение2
Когда лидер сеанса с соответствующим управляющим терминалом ( bash
в вашем случае ) завершает работу, операционная система отправляет SIGHUP всем процессам в группе процессов переднего плана (задание переднего плана). Кроме того, bash
по умолчанию отправляет SIGHUP всем своим заданиям, запущенным или остановленным (остановленные задания также отправляют SIGCONT). Теперь действием по умолчанию при получении SIGHUP является завершение процесса.
Затем есть несколько подходов к тому, чтобы позволить процессу работать после bash
выхода. Во-первых, вы можете сделать свой процесс невосприимчивым к SIGHUP; именно это и nohup
делает команда. Во-вторых, вы можете перевести соответствующую группу процессов в фоновый режим и указать bash
не отправлять ей SIGHUP; именно disown
для этого используется встроенная команда оболочки (обратите внимание, что есть huponexit
опция оболочки, которая заставляет SIGHUP отправляться всем заданиям при выходе из интерактивной оболочки входа).
Если вы хотите повторно присоединить терминал к группе процессов после повторного входа в систему, вы можете использовать оболочку, способную это сделать; такие терминальные мультиплексоры, как , screen
обладают такой функциональностью.