Provided by: manpages-ru_4.21.0-2_all bug

ИМЯ

       nptl - библиотека нитей POSIX

ОПИСАНИЕ

       NPTL  (Native POSIX Threads Library — библиотека нитей POSIX) это библиотека GNU C, в которой реализованы
       нити POSIX, используется в современных версиях Linux.

   NPTL и сигналы
       NPTL makes internal use of the first two real-time signals (signal numbers 32  and  33).   One  of  these
       signals  is  used to support thread cancelation and POSIX timers (see timer_create(2)); the other is used
       as part of a mechanism that ensures all threads in a process always have  the  same  UIDs  and  GIDs,  as
       required by POSIX.  These signals cannot be used in applications.

       Чтобы  не  допустить  случайного  использования  этих  сигналов  в приложениях, что может помешать работе
       реализации NPTL, в различных функциях библиотеки glibc и обёрточных функциях системных вызовов  добавлено
       сокрытие этих сигналов от приложений:

       •  Сигнал SIGRTMIN определён со значением 34 (а не 32).

       •  Интерфейсы  sigwaitinfo(2), sigtimedwait(2) и sigwait(3) игнорируют запросы на ожидание этих сигналов,
          если но указаны в аргументе набора сигналов.

       •  Интерфейсы sigprocmask(2) и pthread_sigmask(3) игнорируют попытки блокировки этих сигналов.

       •  Интерфейсы sigaction(2), pthread_kill(3) и pthread_sigqueue(3) завершаются с  ошибкой  EINVAL  (указан
          некорректный номер сигнала), если заданы эти сигналы.

       •  Функция sigfillset(3) не включает эти сигналы при создании полного набора сигналов.

   NPTL и изменение идентификаторов процесса
       На  уровне  ядра Linux идентификаторы (пользовательский и групповой ID) являются атрибутов нити. Однако в
       POSIX требуется, чтобы все нити POSIX одного процесса имели одинаковые идентификаторы. Для удовлетворения
       этого требования в реализации NPTL  для  всех  системных  вызовов,  изменяющих  идентификаторы  процесса,
       созданы  обёрточные функции, которые при обращении к нижележащим вызовам, также изменяют идентификаторы и
       всем остальным нитям процесса.

       В реализации каждого из этих системных вызовов используется сигнал реального времени, который  посылается
       (с  помощью  tgkill(2)) всем остальным нитях, которым нужно изменить идентификаторы. Перед отправкой этих
       сигналов, нить,  у  которой  изменяются  идентификаторы,  сохраняет  новые  идентификаторы  и  записывает
       использующийся  системный  вызов  в глобальный буфер. Обработчик сигнала в принимающей нити извлекает эту
       информацию и использует тот же системный вызов для изменения своих идентификаторов.

       Обёрточные  функции,  использующие  такую  же  технику:  setgid(2),  setuid(2),  setegid(2),  seteuid(2),
       setregid(2), setreuid(2), setresgid(2), setresuid(2) и setgroups(2).

СТАНДАРТЫ

       Дополнительную информацию о соответствии NPTL стандарту POSIX находится в pthreads(7).

ЗАМЕЧАНИЯ

       В  POSIX  сказано,  что  всем  нитям  процесса  с  доступом  к  памяти,  содержащей  общие  для  процесса
       (PTHREAD_PROCESS_SHARED) мьютексы, доступны эти мьютексы. Однако в 64-битных системах с архитектурой  x86
       определение  мьютекса  для  x86-64  несовместимо  с  определением для i386, что означает, что исполняемые
       32-битные и 64-битные файлы не могут иметь общих мьютексов в системах x86-64.

СМ. ТАКЖЕ

       credentials(7), pthreads(7), signal(7), standards(7)

ПЕРЕВОД

       Русский перевод этой страницы руководства был сделан Alex  Nik  <rage.iz.me@gmail.com>,  Azamat  Hackimov
       <azamat.hackimov@gmail.com>,  Dmitry Bolkhovskikh <d20052005@yandex.ru>, Yuri Kozlov <yuray@komyakino.ru>
       и Иван Павлов <pavia00@gmail.com>

       Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3
       или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное  письмо
       на man-pages-ru-talks@lists.sourceforge.net.

Linux man-pages 6.03                            5 февраля 2023 г.                                        nptl(7)