Когда я должен использовать «nohup», и когда я должен использовать «&»?

16

Я никогда не знаю, когда лучше всего использовать nohup и & в конце команды.

Alex
источник

Ответы:

20

Nohup заставляет программу игнорировать сигнал HUP, позволяя запустить его после закрытия текущего терминала / выхода пользователя из системы. Nohup не отправляет программу в фоновый режим.
& в конце команды относится к управлению заданиями оболочки, позволяя пользователю продолжить работу в текущем сеансе оболочки.
Обычно nohup и & объединяются для запуска программы, которая запускается после выхода из системы пользователя и позволяет продолжить работу в текущем сеансе оболочки.

Кристапу
источник
13

Обычно я использую, &когда хочу запустить в фоновом режиме команду, выполнение которой не займет много времени, или команду, в которой меня не волнует, завершится ли программа, если я неожиданно выйду из сеанса.

xcalc &
rdesktop 1.2.3.4 & 
./this_only_takes_a_few_seconds_but_i_want_my_shell_back.py &

При работе через VPN или изворотливое удаленное соединение, я склонен использовать nohupдля запуска все, что потребуется для запуска. Например, при выполнении импорта больших данных на удаленном хосте вы, возможно, захотите использовать его, nohupчтобы избежать повторного подключения при повторном подключении.

nohup ./do_data_load.py mydatafile.txt &

Он также используется, когда разработчик должным образом не демонизирует сервис, поэтому вы должны использовать его, nohupчтобы убедиться, что он не уничтожен при выходе из системы.

nohup sillyd &

Если вы забыли использовать nohupпри запуске что-то похожее на два последних примера, вы можете использовать встроенные команды bash или zsh disownдля того же эффекта.

$ sillyd &
[1] 12345            # Whoops!
$ disown %1

Это довольно редко, чтобы использовать nohupбез &, так как вы не можете подключиться к сеансу nohup'd, если вы вышли из системы. Это в значительной степени исключает его полезность для интерактивных команд. Если у вас есть интерактивная команда, которую вы хотите сохранить в сеансах или избежать сложных отключений, вы можете использовать ее screen. Огневая мощь полностью вооруженного и оперативного screenсеанса выходит за рамки этого поста, поэтому вы должны проверить его более подробно .

Cakemox
источник
Я считаю, что Tmux проще в настройке и использовании, чем экран. Также BSD лицензируется.
Кристапс
1
Вы также можете использовать, byobuчто добавляет некоторые полезные функции на экране. Он доступен в большинстве подходящих репозиториев и в репозиториях EPEL для Red Hat.
Джеймс
0

nohup: выйти из системы текущего пользователя, процесс не остановится

&: с этим символом в текущем терминале не будет выхода, процесс работает в фоновом режиме

анонимный
источник
4
там все еще мы выводим, так как & не удаляет стандартный вывод и потоки ошибок. Вы должны использовать перенаправление потока, как это (в bash) команда> / dev / null 2> 1
Кристапс