Provided by: manpages-pl-dev_4.23.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⟩.