зачем запускать команду оболочки Linux с &?
Чтобы немедленно вернуть ваше приглашение и запустить процесс в фоновом режиме.
Каковы их функции?
nohup позволяет фоновому процессу продолжать работу даже после выхода пользователя из системы (или выхода из инициирующей оболочки).
> & перенаправляет как стандартный вывод, так и стандартную ошибку в файл журнала.
& запускает все это в фоновом режиме, немедленно давая вам подсказку.
Объяснение:
Каждый процесс Linux открывает три канала ввода-вывода, вход "stdin", стандартный вывод "stdout" и стандартный вывод ошибок "stderr". Они могут использоваться для двоичного кода, но традиционно являются текстовыми. Когда большинство программ видит stdin close, они закрываются (это может изменить программист).
Когда родительская оболочка завершается, stdin закрывается для дочерних элементов, и (часто, обычно) дочерние элементы также выходят. Кроме того, дети получают программный сигнал SIGHUP, указывающий, что пользователь "повесил трубку" (ранее - модем), и по умолчанию здесь также происходит выход. (Обратите внимание, программист может изменить все это при написании программы).
Итак, что делает nohup, так это дает дочернему процессу отдельную среду ввода-вывода, связывая входы и выходы с чем-то, не привязанным к родительской оболочке, и защищая дочерний процесс от сигнала SIGHUP. Как только пользователь отключится, вы увидите фоновый процесс nohup, принадлежащий init (процесс 1), а не оболочка пользователя.
Однако nohup не может выполнить работу полностью, если процесс запущен на переднем плане, поэтому & используется для запуска программы в фоновом режиме, где она может успешно работать с пользователем или без входа в систему.