Provided by: manpages-pl-dev_4.26.0-1_all 

NAZWA
getpid, getppid - pobiera identyfikator procesu
BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)
SKŁADNIA
#include <unistd.h>
pid_t getpid(void);
pid_t getppid(void);
OPIS
getpid() zwraca identyfikator procesu (PID) wywołującego (jest to często wykorzystywane przez funkcje
generujące unikatowe nazwy plików tymczasowych).
getppid() zwraca identyfikator procesu (PID) macierzystego względem procesu wywołującego. Będzie to albo
identyfikator procesu, który utworzył ten proces za pomocą fork(), albo, jeśli tamten proces już się
zakończył, identyfikator procesu, do którego proces ten został zaadoptowany (albo przez init(1), albo
przez proces „dorzynający” (ang. „subreaper”) zdefiniowany przez operację PR_SET_CHILD_SUBREAPER
prctl(2)).
BŁĘDY
Funkcje te zawsze kończą się pomyślnie.
WERSJE
Na Alpha, zamiast pary wywołań systemowych getpid() i getppid(), udostępniane jest pojedyncze wywołanie
systemowe getxpid(), które zwraca parę: identyfikatora procesu oraz identyfikatora procesu macierzystego.
Funkcje opakowujące getpid() i getppid() biblioteki glibc robią to w sposób przezroczysty. Więcej
informacji o przypisywaniu rejestrów znajduje się w podręczniku syscall(2).
STANDARDY
POSIX.1-2008.
HISTORIA
POSIX.1-2001, 4.3BSD, SVr4.
Różnice biblioteki C/jądra
Od glibc 2.3.4 do glibc 2.24 włącznie, funkcja opakowująca dla getpid() buforowała identyfikatory
procesów, w celu unikania dodatkowych wywołań systemowych, jeśli proces powtarza wywołania getpid().
Zwykle było to niewidoczne, ale poprawne działanie tego mechanizmu zależało od wsparcia w funkcjach
opakowujących fork(2), vfork(2) i clone(2): jeżeli aplikacja omijała funkcje opakowujące biblioteki
glibc, używając syscall(2), to getpid() w procesie potomnym zwracało niepoprawną wartość (a dokładniej:
zwracało identyfikator procesu macierzystego). Oprócz tego, występowały sytuacje, gdzie getpid() mogło
zwrócić niepoprawną wartość, nawet jeżeli clone(2) uruchomiono poprzez funkcję opakowującą biblioteki
glibc (więcej informacji o takim przypadku opisano w rozdziale USTERKI w clone(2)). Co więcej, złożoność
kodu buforującego była źródłem kilku błędów w glibc na przestrzeni lat.
Z powodu opisywanych problemów, od glibc 2.25 bufor PID został usunięty: wywołanie do getpid() zawsze
przywoła rzeczywiste wywołanie systemowe, zamiast zwracać wartość zbuforowaną.
UWAGI
Jeśli rodzic wywołującego jest w innej przestrzeni nazw PID (zob. pid_namespaces(7)), getppid() zwraca 0.
Z punktu widzenia jądra, PID (który jest dzielony przez wszystkie wątki w procesie wielowątkowym) jest
również czasem znany jako identyfikator grupy wątków (ang. thread group ID — TGID). Różni się on od
identyfikatora wątku jądra (TID), który jest unikatowy dla każdego wątku. Więcej informacji znajduje się
w podręczniku gettid(2) oraz w opisie znacznika CLONE_THREAD w clone(2).
ZOBACZ TAKŻE
clone(2), fork(2), gettid(2), kill(2), exec(3), mkstemp(3), tempnam(3), tmpfile(3), tmpnam(3),
credentials(7), pid_namespaces(7)
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <pborys@dione.ids.pl>,
Robert Luberda <robert@debian.org> i 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. getpid(2)