выйти из ssh и все еще иметь работающую команду?

выйти из ssh и все еще иметь работающую команду?

Я запускаю команду на сервере. Она идет с этой библиотекой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обладают такой функциональностью.

Связанный контент