Коли я повинен використовувати "nohup", а коли я повинен використовувати "&"?


16

Я ніколи не знаю, коли найкращий час використовувати ногуп та & в кінці команди.

Відповіді:


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сесії виходить за рамки цієї посади, тому вам слід перевірити її більш детально .


Мені здається, що tmux простіше налаштувати та використовувати, ніж екран. Також ліцензія BSD.
Крістапс

1
Ви також можете використовувати, byobuщо додає екрану деякі приємні функції. Він доступний у більшості сприятливих репостів та у репортах EPEL для Red Hat.
Джеймс

0

nohup: вихід поточного користувача, процес не зупиниться

&: з цим символом у поточному терміналі не буде виведення, процес, що працює у фоновому режимі


4
ми все одно виводимо, оскільки & не видаляє стандартні потоки виводу та помилок. ви повинні використовувати перенаправлення потоку, як-от ця команда (в bash)> / dev / null 2> 1
Kristaps
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.