.\" -*- coding: UTF-8 -*-
.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH getpid 2 "30 marca 2023 r." "Linux man\-pages 6.05.01" 
.SH NAZWA
getpid, getppid \- pobiera identyfikator procesu
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <unistd.h>\fP
.PP
\fBpid_t getpid(void);\fP
\fBpid_t getppid(void);\fP
.fi
.SH OPIS
\fBgetpid\fP() zwraca identyfikator procesu (PID) wywołującego (jest to często
wykorzystywane przez funkcje generujące unikatowe nazwy plików
tymczasowych).
.PP
\fBgetppid\fP() zwraca identyfikator procesu (PID) macierzystego względem
procesu wywołującego. Będzie to albo identyfikator procesu, który utworzył
ten proces za pomocą \fBfork\fP(), albo, jeśli tamten proces już się zakończył,
identyfikator procesu, do którego proces ten został zaadoptowany (albo przez
\fBinit\fP(1), albo przez proces \[Bq]dorzynający\[rq]
(ang. \[Bq]subreaper\[rq]) zdefiniowany przez operację
\fBPR_SET_CHILD_SUBREAPER\fP \fBprctl\fP(2)).
.SH BŁĘDY
Funkcje te zawsze kończą się pomyślnie.
.SH WERSJE
Na Alpha, zamiast pary wywołań systemowych \fBgetpid\fP() i \fBgetppid\fP(),
udostępniane jest pojedyncze wywołanie systemowe \fBgetxpid\fP(), które zwraca
parę: identyfikatora procesu oraz identyfikatora procesu
macierzystego. Funkcje opakowujące \fBgetpid\fP() i \fBgetppid\fP() biblioteki
glibc robią to w sposób przezroczysty. Więcej informacji o przypisywaniu
rejestrów znajduje się w podręczniku \fBsyscall\fP(2).
.SH STANDARDY
POSIX.1\-2008.
.SH HISTORIA
POSIX.1\-2001, 4.3BSD, SVr4.
.SS "Różnice biblioteki C/jądra"
.\" The following program demonstrates this "feature":
.\"
.\" #define _GNU_SOURCE
.\" #include <sys/syscall.h>
.\" #include <sys/wait.h>
.\" #include <stdint.h>
.\" #include <stdio.h>
.\" #include <stdlib.h>
.\" #include <unistd.h>
.\"
.\" int
.\" main(int argc, char *argv[])
.\" {
.\"    /* The following statement fills the getpid() cache */
.\"
.\"    printf("parent PID = %ld\n", (intmax_t) getpid());
.\"
.\"    if (syscall(SYS_fork) == 0) {
.\"        if (getpid() != syscall(SYS_getpid))
.\"            printf("child getpid() mismatch: getpid()=%jd; "
.\"                    "syscall(SYS_getpid)=%ld\n",
.\"                    (intmax_t) getpid(), (long) syscall(SYS_getpid));
.\"        exit(EXIT_SUCCESS);
.\"    }
.\"    wait(NULL);
.\"}
Od glibc 2.3.4 do glibc 2.24 włącznie, funkcja opakowująca dla \fBgetpid\fP()
buforowała identyfikatory procesów, w celu unikania dodatkowych wywołań
systemowych, jeśli proces powtarza wywołania \fBgetpid\fP(). Zwykle było to
niewidoczne, ale poprawne działanie tego mechanizmu zależało od wsparcia w
funkcjach opakowujących \fBfork\fP(2), \fBvfork\fP(2) i \fBclone\fP(2): jeżeli
aplikacja omijała funkcje opakowujące biblioteki glibc, używając
\fBsyscall\fP(2), to \fBgetpid\fP() w procesie potomnym zwracało niepoprawną
wartość (a dokładniej: zwracało identyfikator procesu macierzystego). Oprócz
tego, występowały sytuacje, gdzie \fBgetpid\fP() mogło zwrócić niepoprawną
wartość, nawet jeżeli \fBclone\fP(2) uruchomiono poprzez funkcję opakowującą
biblioteki glibc (więcej informacji o takim przypadku opisano w rozdziale
USTERKI w \fBclone\fP(2)). Co więcej, złożoność kodu buforującego była źródłem
kilku błędów w glibc na przestrzeni lat.
.PP
.\" commit c579f48edba88380635ab98cb612030e3ed8691e
.\" https://sourceware.org/glibc/wiki/Release/2.25#pid_cache_removal
.\" FIXME .
.\" Review progress of https://bugzilla.redhat.com/show_bug.cgi?id=1469757
Z powodu opisywanych problemów, od glibc 2.25 bufor PID został usunięty:
wywołanie do \fBgetpid\fP() zawsze przywoła rzeczywiste wywołanie systemowe,
zamiast zwracać wartość zbuforowaną.
.SH UWAGI
Jeśli rodzic wywołującego jest w innej przestrzeni nazw PID
(zob. \fBpid_namespaces\fP(7)), \fBgetppid\fP() zwraca 0.
.PP
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 \[em] 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 \fBgettid\fP(2) oraz w opisie znacznika
\fBCLONE_THREAD\fP w \fBclone\fP(2).
.SH "ZOBACZ TAKŻE"
\fBclone\fP(2), \fBfork\fP(2), \fBgettid\fP(2), \fBkill\fP(2), \fBexec\fP(3),
\fBmkstemp\fP(3), \fBtempnam\fP(3), \fBtmpfile\fP(3), \fBtmpnam\fP(3),
\fBcredentials\fP(7), \fBpid_namespaces\fP(7)
.PP
.SH 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>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
