Подтвердить что ты не робот

Bash flock: Почему 200?

Относительно этого потока: bash flock: exit, если невозможно получить блокировку

Буду признателен, если кто-нибудь сможет объяснить мне, что означает "200".

Я читал о стае, и кажется, что 200, если указать файловый дескриптор, но что хорошего в этом номере?

4b9b3361

Ответ 1

Нет ничего особенного в номере 200. Это просто пример, используемый в man-странице команды flock; и это, случается, большое число, поэтому вряд ли это противоречит файловому дескриптору любого другого файла, который вы открываете во время script.

В своем комментарии вы спрашиваете о:

( 
  flock -e 200
  echo "In critical section"
  sleep 5 
) 200>/tmp/blah.lockfile 
echo "After critical section"

Скобки () создают подоболочку; новый процесс, отдельный от родительского процесса. 200>/tmp/blah.lockfile заставляет этот процесс открывать /tmp/blah.lockfile для записи в дескрипторе файла 200. Команды внутри круглых скобок выполняются внутри этой оболочки.

flock -e 200 получает исключительную блокировку файла, на который указывает файловый дескриптор 200. Исключительная блокировка означает, что любой, кто пытается получить блокировку этого файла, будь то эксклюзивный или общий, блокирует (ждет) до тех пор, пока эта блокировка был отказан или потерпел неудачу, если они набрали тайм-аут или попросили не блокировать. Таким образом, в течение оставшейся части тела подоболочки (команды echo и sleep) блокировка будет удерживаться этой подоболочкой, и никто другой не сможет получить эту блокировку. Как только подоболочка закончится, файл будет закрыт и блокировка будет оставлена.