Различия между & ldquo; < command > & Амп; открестился & Rdquo; и & ldquo; nohup < command > & Амп; открестился & Rdquo;

Это мое понимание использования &, disown и nohup:

  • <command>: запускает процесс в текущем экземпляре терминала bash, ] на переднем плане (то есть процесс указан как bash задание на переднем плане, а stdin, stdout и stderr все еще связаны с терминалом ); не защищен от зависаний ;
  • <command> &: запускает процесс в текущем экземпляре терминала bash, в фоновом режиме (то есть процесс указан как bash фоновое задание и stdin, stdout и stderr все еще связаны с терминалом ); не защищен от зависаний ;
  • <command> & disown: запускает процесс в текущем экземпляре терминала bash, в фоновом режиме , но процесс отсоединен от списка bash заданий (то есть процесс не указан как bash передний план / фоновое задание, а stdin, stdout и stderr по-прежнему связаны с терминал ); невосприимчив к зависаниям ;
  • nohup <command> & disown: запускает процесс в текущем экземпляре терминала bash, в фоновом режиме , но процесс отключен из списка bash заданий (то есть процесс не указан как bash передний план / фоновое задание, а stdin, stdout и stderr еще не привязан к терминалу ); невосприимчив к зависаниям ;

Так, кроме nohup <command> & disown, блокирует stdin и перенаправляет stdout и stderr по умолчанию nohup.out, мне кажется, что его можно считать полностью эквивалентным <command> & disown.

1141 Все вышесказанное верно? Есть заблуждение?

41
задан 21 April 2015 в 18:30

2 ответа

Ваше понимание в основном корректно. И disown и nohup используются, чтобы позволить Вам выходить из рабочей сессии оболочки, не останавливая рабочие задания. Некоторые разъяснения:

  • нет никакой причины работать nohup command & disown, nohup будет уже отрицать его для Вас.

  • nohup определены POSIX, в то время как disown не . Это означает, что, в то время как много оболочек (например, bash, zsh, ksh) имеют его, у других (например tcsh, csh, dash и sh) не будет его.

  • disown может использоваться после , команда была запущена, в то время как nohup должен использоваться прежде.

Насколько я могу сказать, фактический эффект двух команд является тем же. У каждого из них есть функции, которому другой недостает (см. help disown и man nohup), но их основная функция является тем же, да.

Для намного более детального обсуждения этих инструментов и различий между ними, взгляните на ответы здесь:

27
ответ дан 22 April 2015 в 04:30

Ваши первые к третьим точкам кажутся в порядке, хотя stdin, stdout and stderr are still bound to the terminal не правильное понятие. stdin всегда связывается с терминалом в том смысле, что Вы всегда вводили бы имя файла к команде через терминал или способы использовать терминал. stdout and stderr are still bound to the terminal в порядке.

Ваш имеют stdin, stdout and stderr are not still bound to the terminal в четвертой точке, которая не является правильной, как упомянуто в моем более раннем абзаце. Также вот, пожалуйста использование /dev/null как входной файл к command, например, если команда cat, Вы используете его как cat /dev/null.

Команда на Вашей 5-й точке правильно не помещается, Вы использовали nohup <command> & disown, при использовании любого из nohup или disown другой не нужен. Их целями является то же (для игнорирования SIGHUP) но они функционируют немного другим способом. Таким образом, команда может быть упрощена как nohup <command> &.

7
ответ дан 22 April 2015 в 04:30

Другие вопросы по тегам:

Похожие вопросы: