должностное лицо <имя файла - что это делает?

Теоретический максимум ограничен сегментацией памяти, используемой на ЦП, например, X86-64 использует абсолютный механизм (сегменты запускаются в 0 и имеют вместимость 264), но сама ОС может осуществить искусственные пределы на размер процесса.

3
30.08.2012, 02:14
2 ответа

Из описания POSIX exec:

должностное лицо - выполняет команды и открытый, близко, или копирует дескрипторы файлов

В этом случае нет никакой команды, поэтому только дескрипторы файлов изменяются. Обычно, перенаправления, которые Вы пишете на командной строке, влияют на команду на той строке. exec то, как Вы делаете перенаправления на в настоящее время выполняющейся оболочке.

7
27.01.2020, 21:08
  • 1
    поэтому, поскольку нет на самом деле никакой потребности изменить файл или его дескрипторы, его по существу пустая операция? –  NWS 29.08.2012, 18:14
  • 2
    Это не полностью пустая операция. Оставление от сценариев выберет свой стандартный вход от $TESTFILE, начинающего с этой инструкции вместо того, что было stdin прежде, по-видимому, клавиатура для интерактивных сценариев. –  jlliagre 29.08.2012, 18:26
  • 3
    @NWS, Является ли что-то пустой операцией, зависит от того, что это делает, не, необходимо ли то, что это делает на самом деле. Пустая операция ничего не делает по определению кроме возможно передачи некоторое время. Изменение дескрипторов файлов является ничем, так, чтобы не была пустая операция. Выполнение exec отдельно мог считаться пустой операцией, за исключением установки $? к 0. –  jw013 29.08.2012, 19:52
  • 4
    Это - на самом деле очень полезный взлом, я понятия не имел, что Вы могли изменить stdin рабочей оболочки. –  pjc50 16.06.2014, 17:19

Интуитивному пониманию можно помочь путем наблюдения этого шаблона:

cmd                  # fork; execute cmd in child
cmd < /dev/null      # fork; redirect stdin and execute cmd in child
exec cmd             # execute cmd; no fork
exec cmd < /dev/null # redirect stdin and execute cmd; no fork
exec < /dev/null     # redirect stdin; no fork and no execution

Посмотрите, exec не действительно вещь. Это - антивещь. Это не означает, "выполняются" вообще. Это означает, "не разветвляются". Это заставляет выполнение перенаправления и/или команды команды произойти в текущем процессе.

10
27.01.2020, 21:08

Теги

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