Spec-Zone.ru › GNU Make

Взаимодействие с POSIX сервером задач

В системах POSIX сервер задач реализуется одним из двух способов: в системах, которые его поддерживают, GNU make создаст именованную трубу и будет использовать её для сервера задач. В этом случае опция авторизации будет иметь вид --jobserver-auth=fifo:PATH, где «PATH» — путь к именованной трубе. Для доступа к серверу задач необходимо открыть путь к именованной трубе и читать/записывать в неё, как описано ниже.

Если система не поддерживает именованные трубы, или если пользователь предоставил опцию --jobserver-style и указал «pipe», то сервер задач будет реализован как простая UNIX-труба. В этом случае опция авторизации будет иметь вид --jobserver-auth=R,W, где «R» и «W» — неотрицательные целые числа, представляющие дескрипторы файлов: «R» — дескриптор чтения, а «W» — дескриптор записи. Если один или оба из этих дескрипторов являются отрицательными, это означает, что сервер задач отключён для этого процесса.

При использовании простой трубы только командные строки, которые make понимают как рекурсивные вызовы make (см. Как работает переменная MAKE), будут иметь доступ к серверу задач. При написании makefiles необходимо убедиться, что команда помечена как рекурсивная (чаще всего путём добавления префикса + к командной строке (см. Рекурсивное использование make)). Обратите внимание, что сторона чтения трубы сервера задач установлена в режиме «блокирования». Этого значения менять не следует.

В обеих реализациях сервера задач труба будет предварительно загружена одним односимвольным маркером для каждой доступной задачи. Чтобы получить дополнительный слот, необходимо прочитать один символ из сервера задач; чтобы освободить слот, необходимо записать один символ обратно в сервер задач.

Важно, что при освобождении слота задачи вы записываете тот же символ, который прочитали. Не предполагайте, что все маркеры являются одинаковыми символами; разные символы могут иметь различное значение для GNU make. Порядок не важен, так как make не имеет представления о порядке завершения задач.

Существуют различные условия возникновения ошибок, которые необходимо учитывать, чтобы обеспечить надёжность вашей реализации:

  • Если у вас есть аргумент командной строки, управляющий параллельной работой вашего инструмента, подумайте, нужно ли вашему инструменту обнаруживать ситуации, когда указаны как сервер задач, так и аргумент командной строки, и как он должен на них реагировать.
  • Если ваш инструмент не распознаёт формат строки --jobserver-auth, он должен предположить, что сервер задач использует другой стиль, и он не может подключиться.
  • Если ваш инструмент определяет, что опция --jobserver-auth ссылается на простую трубу, но указанные дескрипторы файлов закрыты, это означает, что вызывающий процесс make не считал, что ваш инструмент является рекурсивным вызовом make (например, командная строка не была префиксрована символом +). Вам следует уведомить об этом ваших пользователей.
  • Ваш инструмент должен обязательно записывать обратно маркеры, которые он прочитал, даже в условиях возникновения ошибок. Это относится не только к ошибкам в вашем инструменте, но и к внешним влияниям, таким как прерывания (SIGINT) и т. д. Вы можете установить обработчики сигналов для управления этой записью обратно.
  • Ваш инструмент также может проверить первое слово переменной MAKEFLAGS и проверить наличие символа n. Если этот символ присутствует, то make был вызван с опцией «-n», и ваш инструмент может захотеть остановиться, не выполняя никаких операций.

Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/make/manual/html_node/POSIX-Jobserver.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API