setpgid(2) System Calls Manual setpgid(2) NAZWA setpgid, getpgid, setpgrp, getpgrp - pobiera/ustawia grupe procesow BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include int setpgid(pid_t pid, pid_t pgid); pid_t getpgid(pid_t pid); pid_t getpgrp(void); /* wersja POSIX.1 */ [[deprecated]] pid_t getpgrp(pid_t pid); /* wersja BSD */ int setpgrp(void); /* wersja Systemu V */ [[deprecated]] int setpgrp(pid_t pid, pid_t pgid); /* wersja BSD */ Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)): getpgid(): _XOPEN_SOURCE >= 500 || /* Od glibc 2.12: */ _POSIX_C_SOURCE >= 200809L setpgrp() (POSIX.1): _XOPEN_SOURCE >= 500 || /* Od glibc 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _SVID_SOURCE setpgrp() (BSD), getpgrp() (BSD): [Ponizsze sa dostepne wylacznie przed glibc 2.19] _BSD_SOURCE && ! (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE || _GNU_SOURCE || _SVID_SOURCE) OPIS Wszystkie te interfejsy sa dostepne w Linuksie i sluza do pobierania i ustawiania identyfikatora grupy procesu (process group ID -- PGID). Preferowanymi, okreslonymi przez POSIX.1 sposobami sa: getpgrp(void) do pobierania PGID procesu wywolujacego oraz setpgid() do ustawiania PGID procesu. setpgid() ustawia PGID procesu okreslonego przez pid na pgid. Jesli pid jest zerem, to uzywany jest PGID procesu wywolujacego. Jesli pgid jest zerem, to PGID procesu okreslonego przez pid staje sie taki sam, jak jego identyfikator procesu. Jesli setpgid() jest uzywane do przeniesienia procesu z jednej grupy procesow do innej (jak to robia niektore powloki podczas tworzenia potokow), to obie grupy procesow musza nalezec do tej samej sesji (zob. setsid(2) i credentials(7)). W tym przypadku pgid okresla istniejaca grupe procesow, do ktorej zostanie przylaczony proces i numer sesji dla tej grupy musi byc taki sam, jak numer sesji dla przylaczanego procesu. Wersja POSIX.1 getpgrp(), ktora nie przyjmuje zadnych argumentow, zwraca PGID procesu wywolujacego. getpgid zwraca PGID procesu okreslonego przez pid. Jesli pid jest zerem, to uzywany jest identyfikator procesu, procesu wywolujacego (pobieranie PGID procesu innego niz wywolujacy jest rzadko potrzebne i do tego celu preferowany jest getpgrp() POSIX.1). Wywolanie setpgrp() w stylu Systemu V, ktore nie przyjmuje argumentow, jest rownowazne setpgid(0, 0). Specyficzne dla BSD wywolanie setpgrp(), ktore przyjmuje argumenty pid i pgid, jest funkcja opakowujaca, ktora wywoluje setpgid(pid, pgid) Od glibc 2.19, specyficzna dla BSD funkcja setpgrp() nie jest juz ujawniana przez ; wywolania powinny byc zastapione wywolaniem setpgid(), o ktorym mowa wyzej. Specyficzne dla BSD wywolanie getpgrp(), ktore przyjmuje argument pid, jest funkcja opakowujaca, ktora wywoluje getpgid(pid) Od glibc 2.19, specyficzna dla BSD funkcja getpgrp() nie jest juz ujawniana przez ; wywolania powinny byc zastapione wywolaniem getpgrp() POSIX.1, nieprzyjmujacym argumentow (jesli chce sie pozyskac PGID wywolujacego) lub wywolaniem getpgid(), o ktorym mowa wyzej. WARTOSC ZWRACANA Po pomyslnym zakonczeniu setpgid() i setpgrp() zwracaja zero. W przypadku bledu zwracane jest -1 i ustawiane errno wskazujac blad. getpgrp POSIX.1 zawsze zwraca PGID wywolujacego. getpgid() i specyficzne dla BSD getpgrp() po pomyslnym zakonczeniu zwracaja grupe procesow. W przypadku bledu zwracane jest -1 i ustawiane errno wskazujac blad. BLEDY EACCES Nastapila proba zmiany identyfikatora grupy procesow dla jednego z procesow potomnych procesu wywolujacego funkcje, zas ow proces potomny wykonal juz execve(2) (setpgid, setpgrp). EINVAL pgid jest mniejsze niz 0 (setpgid(), setpgrp()). EPERM Nastapila proba przeniesienia procesu do grupy procesow nalezacej do innej sesji, lub proba zmiany identyfikatora grupy procesow dla jednego z procesow potomnych procesu wywolujacego funkcje, zas ow proces potomny nalezy do innej sesji, lub proba zmiany identyfikatora grupy procesow dla przywodcy sesji (setpgid(), setpgrp()). EPERM Docelowa grupa procesu nie istnieje. (setpgid(), setpgrp()). ESRCH Dla getpgid(): nie ma procesu o numerze pid. Dla setpgid(): pid nie jest ani procesem wywolujacym, ani jego potomkiem. STANDARDY getpgid() setpgid() getpgrp() (bez argumentow) POSIX.1-2024. setpgrp() getpgrp() (1 argument) Brak. HISTORIA getpgid() setpgid() getpgrp() (bez argumentow) POSIX.1-2001. setpgrp() (bez argumentow) POSIX.1-2001. Oznaczone jako przestarzale w POSIX.1-2008. Usuniete w POSIX.1-2024. setpgrp() (2 argumenty) getpgrp() (1 argument) 4.2BSD. UWAGI Potomek utworzony przez fork(2) dziedziczy identyfikator grupy procesu od swojego rodzica. Wartosc PGID jest takze zachowywana podczas execve(2). Kazda grupa procesow nalezy do pewnej sesji i kazdy proces nalezy do sesji, do ktorej nalezy jego grupa procesow (zob. credentials(7)). Sesja moze miec terminal kontrolujacy. W kazdym czasie jedna (i tylko jedna) z grup procesow w sesji, moze byc pierwszoplanowa grupa procesu dla terminala; pozostale grupy procesu sa w tle. Jesli z terminala wygenerowany zostanie sygnal (np. przez wpisanie klucza przerwania, generujacego sygnal SIGINT), to sygnal ten trafia to pierwszoplanowej grupy procesu (opis znakow generujacych sygnaly zawarto w podreczniku termios(3)). Jedynie pierwszoplanowa grupa procesu moze czytac (read(2)) z terminala, jesli grupa procesu tla sprobuje dokonac odczytu (read(2)) z terminala, to do grupy wysylany jest sygnal ja zawieszajacy -- SIGTTIN. Do pobierania/ustawiania pierwszoplanowej grupy procesu terminala kontrolujacego sluza funkcje tcgetpgrp(3) i tcsetpgrp(3). Wywolania setpgid() i getpgrp() sa uzywane przez programy takie jak bash(1), do utworzenia grupy procesu w celu zaimplementowania kontroli zadan powloki. Jesli przerwanie procesu spowoduje, ze grupa procesow stanie sie osierocona, a wszystkie procesy nowoosieroconej grupy beda zatrzymane, to do kazdego z nich zostanie wyslany sygnal SIGHUP, po ktorym nastapi wyslanie sygnalu SIGCONT. Osierocona grupa procesow to taka, w ktorej rodzicem kazdego czlonka grupy procesow jest rowniez czlonek grupy procesow lub czlonek grupy procesow w innej sesji (zob. tez credentials(7)). ZOBACZ TAKZE getuid(2), setsid(2), tcgetpgrp(3), tcsetpgrp(3), termios(3), credentials(7) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Andrzej Krzysztofowicz 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.17 8 lutego 2026 r. setpgid(2)