plucky (2) getpid.2.gz

Provided by: manpages-pl-dev_4.25.1-1_all bug

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  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.