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/.