NAZWA¶
setpgid, getpgid, setpgrp, getpgrp - pobranie/ustawienie grupy procesów
SKŁADNIA¶
#include <unistd.h>
int setpgid(pid_t pid, pid_t pgid);
pid_t getpgid(pid_t pid);
int setpgrp(void);
pid_t getpgrp(void);
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
setpgid ustawia dla procesu określonego przez
pid numer ID
grupy procesów na
pgid. Jśli
pid jest zerem, to
używany jest numer ID bieżącego procesu. Jeśli
pgid jest zerem, to używany jest numer ID procesu dla procesu
określonego przez
pid. 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. 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.
getpgid zwraca numer ID grupy procesów dla procesu
określonego przez
pid. Jeśli
pid jest zerem, to
używany jest numer ID bieżącego procesu.
Wywołanie
setpgrp() jest równoważne
setpgid(0,0).
Podobnie
getpgrp() jest równoważne
getpgid(0).
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.
Grupy procesów używane są do rozprowadzania
sygnałów oraz do rozstrzygania przez terminale
żądań dotyczących danych wejściowych:
procesy, które należą do tej samej grupy procesów,
co terminal są pierwszoplanowe i mogą czytać, podczas gdy
pozostałe procesy są blokowane sygnałem, jeśli
próbują czytać. Te funkcje są więc
używane przez programy takie, jak
csh(1) do tworzenia grup
procesów w implementacji sterowania zadaniami. Funkcje
TIOCGPGRP
i
TIOCSPGRP opisane w
termios(3) służą do
pobierania/ustawiania grupy procesów dla terminala sterującego.
Jeśli sesja posiada terminal sterujący, nie jest ustawione CLOCAL
i wystąpi zawieszenie, to do procesu przewodzącego sesji
wysyłany zostanie SIGHUP. Jeśli proces przewodzący sesji
zakończy się, to sygnał SIGHUP zostanie wysłany to
wszystkich procesów pierwszoplanowych należących do grupy
procesów terminala sterującego.
Jeśli zakończenie 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.
WARTOŚĆ ZWRACANA¶
Po pomyślnym zakończeniu
setpgid i
setpgrp
zwracają zero. W przypadku błędu zwracane jest -1 i
odpowiednio ustawiane
errno.
getpgid po pomyślnym zakończeniu zwraca grupę
procesów. W przypadku błędu zwracane jest -1 i
odpowiednio ustawiane
errno.
getpgrp Zawsze zwraca aktualną grupę procesów.
BŁĘDY¶
- EINVAL
- pgid jest mniejsze niż 0 ( setpgid,
setpgrp).
- 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 ( 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).
- ESRCH
- Dla getpgid: nie ma procesu o numerze pid. Dla
setpgid: pid nie jest ani bieżącym procesem,
ani potomkiem bieżącego procesu.
ZGODNE Z¶
Funkcje
setpgid i
getpgrp są zgodne z POSIX.1. Funkcja
setpgrp pochodzi z BSD 4.2. Funkcja
getpgid jest zgodna z SVr4.
UWAGI¶
POSIX oparł funkcję
setpgid na funkcji BSD
setpgrp.
SysV również posiada funkcję o tej nazwie, ale funkcja ta
jest tożsama z
setsid(2).
Aby uzyskać prototypy tych funkcji pod glibc należy
zdefiniować zarówno _XOPEN_SOURCE, jak i _XOPEN_SOURCE_EXTENDED,
lub użyć "#define _XOPEN_SOURCE
n", gdzie
n jest pewną liczbą całkowitą
większą lub równą 500.
ZOBACZ TAKŻE¶
getuid(2),
setsid(2),
tcgetpgrp(3),
tcsetpgrp(3),
termios(3)
Powyższe tłumaczenie pochodzi z nieistniejącego już
Projektu Tłumaczenia Manuali i
może nie być
aktualne. W razie zauważenia różnic między
powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub
funkcji, prosimy o zapoznanie się z oryginalną
(angielską) wersją strony podręcznika za pomocą
polecenia:
- man --locale=C 2 setpgid
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.