Что означает символ амперсанда (&) с `nohup`?


11

Я видел множество примеров, когда &после конца командной строки стоит a, но я не могу найти объяснения, что он делает. Это даже не в nohup«S manстранице. Это снаряд?

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


1
«Я считаю, что любой процесс, запущенный с помощью nohup, кажется, обладает иммунитетом к любому сигналу зависания». Вот для чего нужен nohup.
Сэмюэль Эдвин Уорд

Хорошо, позвольте мне уточнить: единственные примеры, которые я видел, используют &, так что я не был уверен, &был ли какой-то модификатор или аргумент, который заставлял nohupсебя вести себя по-другому.
Чад Харрисон

1
Это разумно подозревать. Фактически он не изменяет поведение nohup (nohup даже не видит его), но изменяет поведение оболочки.
Сэмюэль Эдвин Уорд

nohup & -> Нет Hangup и фон его. Из старых добрых времен модемов и серийных терминалов. Когда мой терминал и модем перейдут в автономный режим, продолжайте обрабатывать их в фоновом режиме, чтобы работа была выполнена, когда я в следующий раз выйду в сеть.
Fiasco Labs

Ответы:


19

Из справочной страницы bash :

Если команда завершается оператором управления &, оболочка выполняет команду в фоновом режиме в подоболочке. Оболочка не ожидает завершения команды, и статус возврата равен 0.

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


4
Я видел, как вы в последнее время публикуете кучу хороших ответов, и мой мозг всегда переводит ваше имя пользователя в McGuyver. Не уверен, почему я чувствую необходимость сказать тебе это.
MDMarra

1
@MDMarra Я приму это как комплимент ;-)
mgorven

1
@MDMarra По крайней мере, вы не думаете: «МакГрубер»
Уорд - Восстановить Монику

7

Использование амперсанда (&) запустит команду в дочернем процессе (дочернем по отношению к текущему сеансу bash). Однако при выходе из сеанса все дочерние процессы будут уничтожены.

использование nohup + ampersand (&) сделает то же самое, за исключением того, что когда сеанс завершится, родительский процесс дочернего процесса изменится на «1», то есть процесс «init», таким образом сохраняя дочерний процесс от уничтожения.


3

Да, это оболочка - она ​​запускает команду в фоновом режиме, поэтому вам не нужно ждать возврата текущей команды перед тем, как вводить другие команды.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.