Почему использование “nohup &\”, а не “должностное лицо &\”

Это должно просто работать из поля над F17 + также. Это сделало для меня.

67
18.06.2014, 10:55
4 ответа

Что лучше - рыба или велосипед? 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 &
114
27.01.2020, 19:31

нельзя сравнивать nohup с exec. Когда вы запускаете исполняемый файл с nohup, процесс не будет убит при выходе из системы (сессия ssh); обычно nohup используется с nice для запуска процессов с более низким приоритетом. Сигнал HUP, по соглашению, является способом, которым терминал предупреждает зависимые процессы о выходе из системы

.
2
27.01.2020, 19:31

Встроенная команда exec заменяет оболочку на , новый процесс не создается, новый PID не создаётся. После завершения обычно ваш терминал закрывается. Запуская его в фоновом режиме, сначала создается подоболочка, которая затем аналогичным образом немедленно заменяется на .

Команда nohup выполнит , но приведет к зависанию (kill -s 1), поэтому она не будет завершена, когда оболочка, с которой она была запущена, будет закрыта. Запустив его в фоновом режиме, сначала создается подоболочка, и команда запускается в фоновом режиме, возвращаясь к подсказке.

В скриптинге непосредственный эффект более или менее одинаковый, однако, запускается вашим скриптом, и скрипт продолжит работу, не дожидаясь запуска, отправки вывода или завершения работы .

2
27.01.2020, 19:31

exec & => выполняет процесс как фоновый процесс, поэтому вы можете продолжать использовать тот же терминал для других заданий.

nohup => игнорирует все SIGHUP (сигнал завершения) и продолжает выполнение, даже если ваш терминал закрыт. Процесс

exec завершается после получения SIGHUP , но процесс nohup продолжается.

18
27.01.2020, 19:31

Теги

Похожие вопросы