Это должно просто работать из поля над F17 + также. Это сделало для меня.
Что лучше - рыба или велосипед? nohup
и exec
делают разные вещи.
exec
заменяет оболочку другой программой. Использование exec
в простом фоновом задании не полезно: exec мипрограмма; больше вещей
заменяет оболочку на мипрограмму
и поэтому не запускает больше вещей
, в отличие от мипрограммы; больше вещей
, которая запускает больше вещей
, когда заканчивается мипрограмма
; но exec myprogram & more stuff
начинает myprogram
в фоновом режиме и затем запускает more stuff
, так же как и myprogram & more stuff
.
nohup
запускает специальную программу с игнорируемым сигналом SIGHUP. Когда терминал закрыт, ядро посылает сигнал SIGHUP управляющему процессу в этом терминале (т.е. оболочке). В свою очередь, оболочка посылает SIGHUP всем заданиям, запущенным в фоновом режиме. Запуск задания с nohup
предотвращает его такое уничтожение в случае смерти терминала (что происходит, например, если вы вошли в систему удаленно и соединение обрывается, или если вы закрываете терминальный эмулятор).
nohup
также перенаправляет вывод программы в файл nohup.out
. Это позволяет избежать гибели программы, так как она не может ни записать на свой вывод, ни выдать ошибку. Обратите внимание, что nohup
не перенаправляет вход. Чтобы полностью отключить программу от терминала, на котором Вы ее запустили, используйте
nohup myprogram </dev/null >myprogram.log 2>&1 &
нельзя сравнивать nohup
с exec
. Когда вы запускаете исполняемый файл с nohup
, процесс не будет убит при выходе из системы (сессия ssh); обычно nohup
используется с nice
для запуска процессов с более низким приоритетом. Сигнал HUP
, по соглашению, является способом, которым терминал предупреждает зависимые процессы о выходе из системы
Встроенная команда exec
заменяет оболочку на
, новый процесс не создается, новый PID не создаётся. После завершения
обычно ваш терминал закрывается. Запуская его в фоновом режиме, сначала создается подоболочка, которая затем аналогичным образом немедленно заменяется на
.
Команда nohup
выполнит
, но приведет к зависанию (kill -s 1), поэтому она не будет завершена, когда оболочка, с которой она была запущена, будет закрыта. Запустив его в фоновом режиме, сначала создается подоболочка, и команда запускается в фоновом режиме, возвращаясь к подсказке.
В скриптинге непосредственный эффект более или менее одинаковый, однако,
запускается вашим скриптом, и скрипт продолжит работу, не дожидаясь запуска, отправки вывода или завершения работы
.
exec &
=> выполняет процесс как фоновый процесс, поэтому вы можете продолжать использовать тот же терминал для других заданий.
nohup
=> игнорирует все SIGHUP (сигнал завершения) и продолжает выполнение, даже если ваш терминал закрыт. Процесс
exec
завершается после получения SIGHUP
, но процесс nohup
продолжается.