Provided by: manpages-pl-dev_4.26.0-1_all 

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 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.
Linux man-pages 6.9.1 2 maja 2024 r. setpgid(2)