Различия между & ldquo; & lt; command & gt; & Амп; открестился & Rdquo; и & ldquo; nohup & lt; command & gt; & Амп; открестился & 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 's (т.е. процесс не указан в качестве bash переднего плана / фона задание и stdin, stdout и stderr еще не связаны с терминалом), невосприимчивы к зависаниям;

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

Правильно ли это? Любое заблуждение?

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

1 ответ

Ваши первые и третьи точки кажутся хорошо, хотя 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
ответ дан 23 May 2018 в 21:11

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

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