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

NAZWA

       setpgid, getpgid, setpgrp, getpgrp - pobiera/ustawia grupę procesów

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <unistd.h>

       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):
           [Poniższe są dostępne wyłącznie przed glibc 2.19]
           _BSD_SOURCE &&
               ! (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE
                   || _GNU_SOURCE || _SVID_SOURCE)

OPIS

       Wszystkie  te  interfejsy  są  dostępne  w  Linuksie  i  służą  do pobierania i ustawiania
       identyfikatora grupy procesu (process group ID — PGID). Preferowanymi,  określonymi  przez
       POSIX.1 sposobami są: getpgrp(void) do pobierania PGID procesu wywołującego oraz setpgid()
       do ustawiania PGID procesu.

       setpgid() ustawia PGID procesu określonego przez pid na pgid. Jeśli  pid  jest  zerem,  to
       używany jest PGID procesu wywołującego. Jeśli pgid jest zerem, to PGID procesu określonego
       przez pid staje się taki sam, jak jego identyfikator procesu. Jeśli setpgid() jest używane
       do  przeniesienia  procesu z jednej grupy procesów do innej (jak to robią niektóre powłoki
       podczas tworzenia potoków), to obie grupy procesów muszą należeć do tej samej sesji  (zob.
       setsid(2)  i  credentials(7)).  W tym przypadku pgid określa istniejącą grupę procesów, do
       której zostanie przyłączony proces i numer sesji dla tej grupy  musi  być  taki  sam,  jak
       numer sesji dla przyłączanego procesu.

       Wersja  POSIX.1  getpgrp(),  która  nie  przyjmuje żadnych argumentów, zwraca PGID procesu
       wywołujacego.

       getpgid zwraca PGID procesu określonego przez pid. Jeśli pid jest zerem, to  używany  jest
       identyfikator procesu, procesu wywołującego (pobieranie PGID procesu innego niż wywołujący
       jest rzadko potrzebne i do tego celu preferowany jest getpgrp() POSIX.1).

       Wywołanie setpgrp() w stylu Systemu V, które nie  przyjmuje  argumentów,  jest  równoważne
       setpgid(0, 0).

       Specyficzne  dla  BSD  wywołanie  setpgrp(),  które  przyjmuje  argumenty pid i pgid, jest
       funkcją opakowującą, która wywołuje

           setpgid(pid, pgid)

       Od glibc 2.19, specyficzna  dla  BSD  funkcja  setpgrp()  nie  jest  już  ujawniana  przez
       <unistd.h>; wywołania powinny być zastąpione wywołaniem setpgid(), o którym mowa wyżej.

       Specyficzne  dla  BSD  wywołanie  getpgrp(),  które  przyjmuje  argument pid, jest funkcją
       opakowującą, która wywołuje

           getpgid(pid)

       Od glibc 2.19, specyficzna  dla  BSD  funkcja  getpgrp()  nie  jest  już  ujawniana  przez
       <unistd.h>; wywołania powinny być zastąpione wywołaniem getpgrp() POSIX.1, nieprzyjmującym
       argumentów (jeśli chce się pozyskać PGID wywołującego) lub wywołaniem getpgid(), o  którym
       mowa wyżej.

WARTOŚĆ ZWRACANA

       Po  pomyślnym  zakończeniu setpgid() i setpgrp() zwracają zero. W przypadku błędu zwracane
       jest -1 i ustawiane errno wskazując błąd.

       getpgrp POSIX.1 zawsze zwraca PGID wywołującego.

       getpgid() i  specyficzne  dla  BSD  getpgrp()  po  pomyślnym  zakończeniu  zwracają  grupę
       procesów. W przypadku błędu zwracane jest -1 i ustawiane errno wskazując błąd.

BŁĘDY

       EACCES Nastąpiła  próba  zmiany  identyfikatora  grupy  procesów  dla  jednego  z procesów
              potomnych procesu wywołującego funkcję, zaś ów proces potomny wykonał już execve(2)
              (setpgid, setpgrp).

       EINVAL pgid jest mniejsze niż 0 (setpgid(), setpgrp()).

       EPERM  Nastąpiła  próba  przeniesienia procesu do grupy procesów należącej do innej sesji,
              lub próba zmiany identyfikatora grupy procesów dla  jednego  z  procesów  potomnych
              procesu  wywołującego  funkcję,  zaś  ów  proces potomny należy do innej sesji, lub
              próba  zmiany  identyfikatora  grupy  procesów  dla  przywódcy  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 wywołującym, ani jego potomkiem.

STANDARDY

       getpgid()
       setpgid()
       getpgrp() (bez argumentów)
       setpgrp() (bez argumentów)
              POSIX.1-2008 (lecz zob. HISTORIA).

       setpgrp() (2 argumenty)
       getpgrp() (1 argument)
              Brak.

HISTORIA

       getpgid()
       setpgid()
       getpgrp() (bez argumentów)
              POSIX.1-2001.

       setpgrp() (bez argumentów)
              POSIX.1-2001.  POSIX.1-2008 oznacza je jako przestarzałe.

       setpgrp() (2 argumenty)
       getpgrp() (1 argument)
              4.2BSD.

UWAGI

       Potomek utworzony przez fork(2) dziedziczy identyfikator grupy procesu od swojego rodzica.
       Wartość PGID jest także zachowywana podczas execve(2).

       Każda  grupa  procesów  należy  do  pewnej sesji i każdy proces należy do sesji, do której
       należy jego grupa procesów (zob. credentials(7)).

       Sesja może mieć terminal kontrolujący. W każdym  czasie  jedna  (i  tylko  jedna)  z  grup
       procesów  w  sesji,  może być pierwszoplanową grupą procesu dla terminala; pozostałe grupy
       procesu są w tle. Jeśli z terminala  wygenerowany  zostanie  sygnał  (np.  przez  wpisanie
       klucza  przerwania,  generującego sygnał SIGINT), to sygnał ten trafia to pierwszoplanowej
       grupy procesu (opis znaków generujących sygnały zawarto w podręczniku termios(3)). Jedynie
       pierwszoplanowa  grupa  procesu może czytać (read(2)) z terminala, jeśli grupa procesu tła
       spróbuje dokonać odczytu (read(2)) z terminala,  to  do  grupy  wysyłany  jest  sygnał  ją
       zawieszający  — SIGTTIN. Do pobierania/ustawiania pierwszoplanowej grupy procesu terminala
       kontrolującego służą funkcje tcgetpgrp(3) i tcsetpgrp(3).

       Wywołania setpgid() i getpgrp() są używane przez programy takie jak bash(1), do utworzenia
       grupy procesu w celu zaimplementowania kontroli zadań powłoki.

       Jeśli  przerwanie  procesu spowoduje, że grupa procesów stanie się osierocona, a wszystkie
       procesy nowoosieroconej grupy będą zatrzymane, to  do  każdego  z  nich  zostanie  wysłany
       sygnał  SIGHUP,  po  którym nastąpi wysłanie sygnału SIGCONT. Osierocona grupa procesów to
       taka, w której rodzicem każdego członka grupy procesów jest również członek grupy procesów
       lub członek grupy procesów w innej sesji (zob. też credentials(7)).

ZOBACZ TAKŻE

       getuid(2), setsid(2), tcgetpgrp(3), tcsetpgrp(3), termios(3), credentials(7)

TŁUMACZENIE

       Autorami  polskiego  tłumaczenia  niniejszej strony podręcznika są: Andrzej Krzysztofowicz
       <ankry@green.mf.pg.gda.pl> 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⟩.