getpid(2) System Calls Manual getpid(2) NAZWA getpid, getppid - pobiera identyfikator procesu BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include pid_t getpid(void); pid_t getppid(void); OPIS getpid() zwraca identyfikator procesu (PID) wywolujacego (jest to czesto wykorzystywane przez funkcje generujace unikatowe nazwy plikow tymczasowych). getppid() zwraca identyfikator procesu (PID) macierzystego wzgledem procesu wywolujacego. Bedzie to albo identyfikator procesu, ktory utworzyl ten proces za pomoca fork(), albo, jesli tamten proces juz sie zakonczyl, identyfikator procesu, do ktorego proces ten zostal zaadoptowany (albo przez init(1), albo przez proces ,,dorzynajacy" (ang. ,,subreaper") zdefiniowany przez operacje PR_SET_CHILD_SUBREAPER prctl(2)). BLEDY Funkcje te zawsze koncza sie pomyslnie. WERSJE Na Alpha, zamiast pary wywolan systemowych getpid() i getppid(), udostepniane jest pojedyncze wywolanie systemowe getxpid(), ktore zwraca pare: identyfikatora procesu oraz identyfikatora procesu macierzystego. Funkcje opakowujace getpid() i getppid() biblioteki glibc robia to w sposob przezroczysty. Wiecej informacji o przypisywaniu rejestrow znajduje sie w podreczniku syscall(2). STANDARDY POSIX.1-2008. HISTORIA POSIX.1-2001, 4.3BSD, SVr4. Roznice biblioteki C/jadra Od glibc 2.3.4 do glibc 2.24 wlacznie, funkcja opakowujaca dla getpid() buforowala identyfikatory procesow, w celu unikania dodatkowych wywolan systemowych, jesli proces powtarza wywolania getpid(). Zwykle bylo to niewidoczne, ale poprawne dzialanie tego mechanizmu zalezalo od wsparcia w funkcjach opakowujacych fork(2), vfork(2) i clone(2): jezeli aplikacja omijala funkcje opakowujace biblioteki glibc, uzywajac syscall(2), to getpid() w procesie potomnym zwracalo niepoprawna wartosc (a dokladniej: zwracalo identyfikator procesu macierzystego). Oprocz tego, wystepowaly sytuacje, gdzie getpid() moglo zwrocic niepoprawna wartosc, nawet jezeli clone(2) uruchomiono poprzez funkcje opakowujaca biblioteki glibc (wiecej informacji o takim przypadku opisano w rozdziale USTERKI w clone(2)). Co wiecej, zlozonosc kodu buforujacego byla zrodlem kilku bledow w glibc na przestrzeni lat. Z powodu opisywanych problemow, od glibc 2.25 bufor PID zostal usuniety: wywolanie do getpid() zawsze przywola rzeczywiste wywolanie systemowe, zamiast zwracac wartosc zbuforowana. UWAGI Jesli rodzic wywolujacego jest w innej przestrzeni nazw PID (zob. pid_namespaces(7)), getppid() zwraca 0. Z punktu widzenia jadra, PID (ktory jest dzielony przez wszystkie watki w procesie wielowatkowym) jest rowniez czasem znany jako identyfikator grupy watkow (ang. thread group ID -- TGID). Rozni sie on od identyfikatora watku jadra (TID), ktory jest unikatowy dla kazdego watku. Wiecej informacji znajduje sie w podreczniku gettid(2) oraz w opisie znacznika CLONE_THREAD w clone(2). ZOBACZ TAKZE clone(2), fork(2), gettid(2), kill(2), exec(3), mkstemp(3), tempnam(3), tmpfile(3), tmpnam(3), credentials(7), pid_namespaces(7) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Przemek Borys , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. getpid(2)