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

Сначала этот вопрос связан, но определенно не совпадает с этим очень приятным вопросом:

Разница между nohup, disown и &

Я хочу кое-что понять: когда я делаю «&», я прав?

Всегда полезно делать «nohup … &» или просто и достаточно?

Может ли кто-нибудь показать случай, когда вы будете использовать «&» и все еще хотите использовать «nohup»?

  • Команда продолжает выходить, несмотря на использование `nohup`
  • Как получить nohup для выхода с чистого листа при использовании перенаправления файлов
  • Выполнение как sudo, так и nohup по команде
  • Почему фоновые задания запускаются моей оболочкой, живущей дольше, чем исходная оболочка и управляющие терминалы?
  • Как читать из именованного канала после завершения процесса записи?
  • Не удается запустить несколько файлов без nohup
  • Использование `nohup` для импорта дампа MySQL на сервере Debian
  • перенаправление на проблемы с файлом nohup и pipe
  • 3 Solutions collect form web for “Когда вам нужно «nohup», если вы уже используете «&»?”

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

    Обратите внимание, что это не очень точно. Некоторые команды, такие как cd являются функциями оболочки и обычно не разветвляют новый процесс. type cmd обычно скажет вам, является ли cmd внешней командой или функцией оболочки. type type говорит вам, что сам type является функцией оболочки.

    nohup – это нечто другое. Он сообщает новому процессу игнорировать SIGHUP . Это сигнал, отправленный ядром, когда родительская оболочка закрыта.

    Чтобы ответить на ваш вопрос, выполните следующие действия:

    1. run emacs & (по умолчанию должен запускаться в отдельном окне X) .
    2. на родительской оболочке, запустите exit .

    Вы заметите, что окно emacs убито, несмотря на то, что он работает в фоновом режиме. Это поведение по умолчанию, и nohup используется именно для его изменения.

    Запуск задания в фоновом режиме (с помощью & или bg , я уверен, что другие оболочки имеют и другие синтаксисы) – это оболочечная функция, обусловленная возможностью использования современных систем для многозадачности. Вместо того, чтобы развернуть новый экземпляр оболочки для каждой программы, которую вы хотите запустить, современные оболочки ( bash , zsh , ksh , …) будут иметь возможность управлять списком программ (или заданий ). Только один из них за один раз может быть на переднем плане , то есть он получает фокус оболочки. Я хотел бы, чтобы кто-то мог расширить возможности различий между процессом, выполняющимся на переднем плане, и одним в фоновом режиме (основной из них – для stdin / stdout ).

    В любом случае это не влияет на способ реагирования дочернего процесса на SIGHUP . nohup делает.

    Всегда полезно делать nohup ... & ? Да. Если вы только начинаете процесс «в фоновом режиме» с & , этот новый процесс все еще имеет членство в «группе процессов» исходной оболочки. Если эта оболочка или группа процессов получают определенные сигналы (например, SIGHUP), по умолчанию они выходят. Это означает, что если вы запустите процесс с помощью & из оболочки, запущенной xterm или rxvt или каким-либо другим эмулятором терминалов окон, при закрытии окна фоновый процесс получит SIGHUP. Наиболее случайно написанный код не обрабатывает SIGHUP и, следовательно, выходит.

    Если вы nohup ... & , команда nohup устанавливает SIGHUP для игнорирования, а затем выполняет команду. Эта новая команда exec'ed сохраняет маску сигнала nohup setup, если только команда не выполняет некоторую обработку сигнала. Если вы закрываете xterm или rxvt или что-то еще, ядро ​​передает SIGHUP в процесс команды, который игнорируется. Он продолжает работать.

    Выполнение nohup в команде позволяет продолжить работу после закрытия xterm или выйти из системы.

    если вы запустите программу в фоновом режиме (с & как суффикс) в операционной системе Linux и выйдите из системы, даже после этого она будет продолжать работать: попробуйте:

      ping google.com > ping_result & 

    После входа в систему проверьте количество строк в выходном файле ping_result который будет продолжать увеличиваться, означает, что он все еще работает, однако было сказано, что он будет закрыт. то в чем заключается использование команды nohup .

    другой сценарий ==>, как указано выше для nohup emac & ->, который должен поддерживать emac после выхода из системы, но он не показывает работу после входа в систему.

    Linux и Unix - лучшая ОС в мире.