Назад | Перейти на главную страницу

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

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

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

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

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 сеанс выходит за рамки этого сообщения, поэтому вам следует проверьте это подробнее.

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

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