.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2015 by Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH nptl 7 "2 мая 2024 г." "Linux man\-pages 6.12" .SH НАИМЕНОВАНИЕ nptl \- библиотека нитей POSIX .SH ОПИСАНИЕ .\" NPTL (Native POSIX Threads Library — библиотека нитей POSIX) это библиотека GNU C, в которой реализованы нити POSIX, используется в современных версиях Linux. .SS "NPTL и сигналы" Внутри в NPTL используются первые два сигнала реального времени (номера сигналов 32 и 33). Один из этих сигналов используется для поддержки отмены потоков и таймеров POSIX (см. \fBtimer_create\fP(2)); другой используется как часть механизма, который гарантирует, что все потоки в процессе всегда имеют одинаковые UID и GID, как того требует POSIX. Эти сигналы не могут быть использованы в приложениях. .P Чтобы не допустить случайного использования этих сигналов в приложениях, что может помешать работе реализации NPTL, в различных функциях библиотеки glibc и обёрточных функциях системных вызовов добавлено сокрытие этих сигналов от приложений: .IP \[bu] 3 Сигнал \fBSIGRTMIN\fP определён со значением 34 (а не 32). .IP \[bu] Интерфейсы \fBsigwaitinfo\fP(2), \fBsigtimedwait\fP(2) и \fBsigwait\fP(3) игнорируют запросы на ожидание этих сигналов, если но указаны в аргументе набора сигналов. .IP \[bu] Интерфейсы \fBsigprocmask\fP(2) и \fBpthread_sigmask\fP(3) игнорируют попытки блокировки этих сигналов. .IP \[bu] Интерфейсы \fBsigaction\fP(2), \fBpthread_kill\fP(3) и \fBpthread_sigqueue\fP(3) завершаются с ошибкой \fBEINVAL\fP (указан некорректный номер сигнала), если заданы эти сигналы. .IP \[bu] .\" Функция \fBsigfillset\fP(3) не включает эти сигналы при создании полного набора сигналов. .SS "NPTL и изменение идентификаторов процесса" На уровне ядра Linux идентификаторы (пользовательский и групповой ID) являются атрибутов нити. Однако в POSIX требуется, чтобы все нити POSIX одного процесса имели одинаковые идентификаторы. Для удовлетворения этого требования в реализации NPTL для всех системных вызовов, изменяющих идентификаторы процесса, созданы обёрточные функции, которые при обращении к нижележащим вызовам, также изменяют идентификаторы и всем остальным нитям процесса. .P В реализации каждого из этих системных вызовов используется сигнал реального времени, который посылается (с помощью \fBtgkill\fP(2)) всем остальным нитях, которым нужно изменить идентификаторы. Перед отправкой этих сигналов, нить, у которой изменяются идентификаторы, сохраняет новые идентификаторы и записывает использующийся системный вызов в глобальный буфер. Обработчик сигнала в принимающей нити извлекает эту информацию и использует тот же системный вызов для изменения своих идентификаторов. .P .\" FIXME . .\" Maybe say something about vfork() not being serialized wrt set*id() APIs? .\" https://sourceware.org/bugzilla/show_bug.cgi?id=14749 Обёрточные функции, использующие такую же технику: \fBsetgid\fP(2), \fBsetuid\fP(2), \fBsetegid\fP(2), \fBseteuid\fP(2), \fBsetregid\fP(2), \fBsetreuid\fP(2), \fBsetresgid\fP(2), \fBsetresuid\fP(2) и \fBsetgroups\fP(2). .SH СТАНДАРТЫ Дополнительную информацию о соответствии NPTL стандарту POSIX находится в \fBpthreads\fP(7). .SH ПРИМЕЧАНИЯ .\" See POSIX.1-2008 specification of pthread_mutexattr_init() .\" See sysdeps/x86/bits/pthreadtypes.h В POSIX сказано, что всем нитям процесса с доступом к памяти, содержащей общие для процесса (\fBPTHREAD_PROCESS_SHARED\fP) мьютексы, доступны эти мьютексы. Однако в 64\-битных системах с архитектурой x86 определение мьютекса для x86\-64 несовместимо с определением для i386, что означает, что исполняемые 32\-битные и 64\-битные файлы не могут иметь общих мьютексов в системах x86\-64. .SH "СМОТРИТЕ ТАКЖЕ" \fBcredentials\fP(7), \fBpthreads\fP(7), \fBsignal\fP(7), \fBstandards\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) Alex Nik , Azamat Hackimov , Dmitry Bolkhovskikh , Yuri Kozlov , Иван Павлов и Kirill Rekhov . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .