Оба nohup myprocess.out &
или myprocess.out &
устанавливают myprocess.out для запуска в фоновом режиме. После того как я выключил терминал, процесс все еще работает.
Какая разница между ними?
Какая разница между nohup и амперсандом
Ответ 1
nohup
захватывает сигнал зависания (см. man 7 signal
), в то время как амперсанд не работает (кроме того, что оболочка скомпонована таким образом или вообще не отправляет SIGHUP
).
Как правило, при запуске команды с использованием &
и выходе из оболочки после этого оболочка завершает субкоманду с сигналом зависания (kill -SIGHUP <pid>
). Этого можно предотвратить с помощью nohup
, поскольку он улавливает сигнал и игнорирует его, чтобы он никогда не доходил до фактического приложения.
Если вы используете bash, вы можете использовать команду shopt | grep hupon
, чтобы узнать,
ваша оболочка отправляет SIGHUP своим дочерним процессам или нет. Если он выключен, процессы не будут
как вам кажется. Дополнительная информация о завершении bash
приложения можно найти здесь.
Бывают случаи, когда nohup
не работает, например, когда процесс, который вы начинаете повторно подключать
сигнал SIGHUP
, как это имеет место здесь.
Ответ 2
myprocess.out &
будет запускать процесс в фоновом режиме с использованием подоболочки. Если текущая оболочка завершается (скажем, путем выхода из системы), все подоболочки также прекращаются, поэтому фоновый процесс также прекращается. Команда nohup игнорирует сигнал HUP
, и, даже если текущая оболочка будет завершена, подселлем и myprocess.out будет продолжать работать в фоновом режиме. Другое отличие состоит в том, что только &
не перенаправляет stdout/stderr, поэтому, если есть какой-либо вывод или ошибка, они отображаются на терминале. nohup, с другой стороны, перенаправляет stdout/stderr на nohup.out или $HOME/nohup.out.
Ответ 3
Использование амперсанда (&) будет запускать команду в дочернем процессе (дочерний элемент для текущего сеанса bash). Однако при выходе из сеанса все дочерние процессы будут убиты.
используя nohup + ampersand (&), сделает то же самое, за исключением того, что при завершении сеанса родительский элемент дочернего процесса будет изменен на "1", который является процессом "init", таким образом сохраняя ребенка из будучи убитым.
Ответ 4
В большинстве случаев мы заходим на удаленный сервер с помощью ssh. Если вы запустите оболочку script и вы выходите из системы, процесс будет убит. Nohup помогает продолжить запуск script в фоновом режиме даже после выхода из оболочки.
Nohup command name &
eg: nohup sh script.sh &
Nohup захватывает сигналы HUP. Nohup не выполняет задание автоматически в фоновом режиме. Нам нужно сказать, что явно используя &
Ответ 5
Исправьте меня, если я ошибаюсь
nohup myprocess.out &
nohup ловит сигнал зависания, что означает, что он отправит процесс, когда терминал будет закрыт.
myprocess.out &
Процесс может выполняться, но будет остановлен после закрытия терминала.
nohup myprocess.out
Процесс может работать даже с закрытым терминалом, но вы можете остановить процесс, нажав ctrl
+ z
в терминале. Crt
+ z
не работает, если существует &
.
Ответ 6
Команда nohup - это утилита маскировки сигнала и захватывает сигнал зависания. Где, как амперсанд, не обхватывает сигналы зависания. Оболочка завершит команду sub с сигналом зависания при запуске команды, использующей и выходящей из оболочки. Это может быть предотвращено с помощью nohup, поскольку он улавливает сигнал. Команда Nohup принимает сигнал зависания, который может быть отправлен в процесс ядром и заблокирован. Команда Nohup полезна в том случае, когда пользователь хочет запустить долгое завершение работы приложения или закрыть окно, в котором был инициирован процесс. Любое из этих действий обычно побуждает ядро зависать в приложении, но оболочка nohup позволит продолжить процесс. Использование амперсанда будет запускать команду в дочернем процессе и этот дочерний элемент текущего сеанса bash. Когда вы выйдете из сеанса, все дочерние процессы этого процесса будут убиты. Амперсанд относится к управлению заданиями для активной оболочки. Это полезно для запуска процесса в сеансе в фоновом режиме.