Provided by: manpages-pl_4.28.0-2_all 

NAZWA
nptl - natywna biblioteka wątków POSIX
OPIS
NPTL (Native POSIX Threads Library) jest implementacją wątków POSIX w bibliotece GNU C, która jest
używana na współczesnych systemach linuksowych.
NPTL i sygnały
NPTL korzysta wewnętrznie z dwóch pierwszych sygnałów czasu rzeczywistego (numery sygnałów 32 i 33).
Jeden z nich służy do obsługi anulacji wątków i czasomierzy POSIX (zob. timer_create(2)); drugi jest
częścią mechanizmu zapewniającego, że wszystkie wątki procesu zawsze mają takie same UID-y i GID-y tak,
jak wymaga tego POSIX. Sygnałów tych nie można stosować w aplikacjach.
Aby uniknąć przypadkowego korzystania z opisanych sygnałów w aplikacjach, co mogłoby kłócić się z
działaniem implementacji NPTL, różne funkcje biblioteczne glibc i funkcje opakowujące wywołania systemowe
starają się ukryć te sygnały przed aplikacjami, a więc:
• SIGRTMIN jest zdefiniowany z wartością 34 (zamiast 32).
• Interfejsy sigwaitinfo(2), sigtimedwait(2) i sigwait(3) po cichu ignorują żądania oczekiwania na te
dwa sygnały, jeśli poda się je w zbiorze sygnałów, będącym argumentem tych wywołań.
• Interfejsy sigprocmask(2) i pthread_sigmask(3) po cichu ignorują próby blokowania tych dwóch sygnałów.
• Interfejsy sigaction(2), pthread_kill(3) i pthread_sigqueue(3) zawiodą z błędem EINVAL (wskazującym
nieprawidłowy numer sygnału), jeśli poda się te sygnały.
• sigfillset(3) nie obejmuje tych dwóch sygnałów, gdy tworzy pełny zbiór sygnałów.
NPTL i zmiany poświadczeń procesu
Poświadczenia (identyfikatory użytkownika i grupy) na poziomie jądra Linux są atrybutem przynależnym
wątkowi. Jednak POSIX wymaga, aby wszystkie wątki POSIX procesu miały te same poświadczenia. Aby
uwzględnić to wymaganie, implementacja NPTL opakowuje wszystkie wywołania systemowe zmieniające
poświadczenia procesu funkcją, która oprócz przywołania odpowiedniego wywołania systemowego, doprowadza
do zmiany poświadczeń również przez inne wątki procesu.
Implementacja każdego z tych wywołań systemowych obejmuje użycie sygnału czasu rzeczywistego, który jest
wysyłany (za pomocą tgkill(2)) do każdego z innych wątków, który musi zmienić swoje poświadczenia. Przed
wysłaniem tych sygnałów wątek zmieniający poświadczenia zapisuje nowe poświadczenia i odnotowuje
wykorzystywane wywołanie systemowe w globalnym buforze. Procedura obsługi sygnału w odbierającym
wątku/wątkach pobiera tę informację i używa tego samego wywołania systemowego do zmiany swoich
poświadczeń.
Funkcje opakowujące korzystające z tej techniki są dostarczane dla setgid(2), setuid(2), setegid(2),
seteuid(2), setregid(2), setreuid(2), setresgid(2), setresuid(2) i setgroups(2).
STANDARDY
Szczegóły na temat zgodności NPTL ze standardem POSIX opisano w podręczniku pthreads(7).
UWAGI
POSIX nakazuje, aby każdy wątek każdego procesu z dostępem do pamięci, zawierający współdzielony na
poziomie procesu (PTHREAD_PROCESS_SHARED) mutex, mógł działać na tym muteksie. Jednak na 64-bitowych
systemach x86, definicja muteksu dla x86-64 jest niekompatybilna z definicją muteksu dla i386 co oznacza,
że 32-bitowe i 64-bitowe pliki wykonywalne nie mogą dzielić muteksów na systemach x86-64.
ZOBACZ TAKŻE
credentials(7), pthreads(7), signal(7), standards(7)
TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ
ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-
list@lists.sourceforge.net.
Linux man-pages 6.9.1 2 maja 2024 r. nptl(7)