setpgid(2) System Calls Manual setpgid(2) NUME setpgid, getpgid, setpgrp, getpgrp - stabilete/obine grupul de procese BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include int setpgid(pid_t pid, pid_t pgid); pid_t getpgid(pid_t pid); pid_t getpgrp(void); /* versiunea POSIX.1 */ [[depreciat]] pid_t getpgrp(pid_t pid); /* versiunea BSD */ int setpgrp(void); /* versiunea System V */ [[depreciat]] int setpgrp(pid_t pid, pid_t pgid); /* versiunea BSD */ Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): getpgid(): _XOPEN_SOURCE >= 500 || /* Incepand cu glibc 2.12: */ _POSIX_C_SOURCE >= 200809L setpgrp() (POSIX.1): _XOPEN_SOURCE >= 500 || /* Incepand cu glibc 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _SVID_SOURCE setpgrp() (BSD), getpgrp() (BSD): [Acestea sunt disponibile doar inainte de glibc 2.19] _BSD_SOURCE && ! (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE || _GNU_SOURCE || _SVID_SOURCE) DESCRIERE Toate aceste interfee sunt disponibile pe Linux i sunt utilizate pentru a obine i stabili ID-ul grupului de procese (PGID) al unui proces. Modalitaile preferate, specificate in POSIX.1, de a face acest lucru sunt: getpgrp(void), pentru a obine PGID-ul procesului apelant; i setpgid(), pentru a stabili PGID-ul unui proces. setpgid() stabilete PGID-ul procesului specificat de pid la pgid. Daca pid este zero, atunci se utilizeaza ID-ul de proces al procesului apelant. Daca pgid este zero, atunci PGID-ul procesului specificat de pid devine identic cu ID-ul sau de proces. In cazul in care setpgid() este utilizat pentru a muta un proces dintr-un grup de procese in altul (aa cum fac unele shell-uri la crearea de conducte), ambele grupuri de procese trebuie sa faca parte din aceeai sesiune (a se vedea setsid(2) i credentials(7)). In acest caz, pgid specifica un grup de procese existent la care urmeaza sa se alature, iar ID-ul de sesiune al acelui grup trebuie sa corespunda cu ID-ul de sesiune al procesului care se alatura. Versiunea POSIX.1 a getpgrp(), care nu primete argumente, returneaza PGID-ul procesului apelant. getpgid() returneaza PGID-ul procesului specificat de pid. In cazul in care pid este zero, se utilizeaza ID-ul de proces al procesului apelant; (recuperarea PGID-ului unui proces, altul decat cel care face apelul, este rareori necesara, iar POSIX.1 getpgrp() este preferat pentru aceasta sarcina). setpgrp() in stil System V, care nu primete argumente, este echivalent cu setpgid(0, 0). Apelul specific BSD setpgrp(), care primete argumentele pid i pgid, este o funcie de invaluire care apeleaza setpgid(pid, pgid) Incepand cu glibc 2.19, funcia setpgrp() specifica BSD nu mai este expusa de ; apelurile trebuie inlocuite cu apelul setpgid() prezentat mai sus. Apelul specific BSD getpgrp(), care primete un singur argument pid, este o funcie de invaluire care apeleaza getpgid(pid) Incepand cu glibc 2.19, funcia specifica BSD getpgrp() nu mai este expusa de ; apelurile ar trebui inlocuite cu apeluri la POSIX.1 getpgrp() care nu primete argumente (daca intenia este de a obine PGID-ul apelantului), sau cu apelul getpgid() prezentat mai sus. VALOAREA RETURNATA In caz de succes, setpgid() i setpgrp() returneaza zero. In caz de eroare, se returneaza -1, i errno este configurata pentru a indica eroarea. POSIX.1 getpgrp() returneaza intotdeauna PGID-ul apelantului. getpgid() i getpgrp(), specific BSD, returneaza un grup de procese in caz de succes. In caz de eroare, se returneaza -1, iar errno este configurata pentru a indica eroarea. ERORI-IEIRE EACCES S-a incercat modificarea ID-ului grupului de procese al unuia dintre procesele-copil ale procesului apelant, iar procesul-copil a efectuat deja un execve(2) (setpgid(), setpgrp()). EINVAL pgid este mai mic decat 0 (setpgid(), setpgrp()). EPERM S-a incercat mutarea unui proces intr-un grup de procese dintr-o sesiune diferita sau modificarea ID-ului grupului de procese al unuia dintre procesele-copil ale procesului apelant, iar procesul-copil se afla intr-o sesiune diferita, sau modificarea ID-ului grupului de procese al unui lider de sesiune (setpgid(), setpgrp()). EPERM Grupul de procese inta nu exista. (setpgid(), setpgrp()). ESRCH Pentru getpgid(): pid nu se potrivete cu niciun proces. Pentru setpgid(): pid nu este procesul apelant i nu este un copil al procesului apelant. STANDARDE getpgid() setpgid() getpgrp() (fara argumente) POSIX.1-2024. setpgrp() getpgrp() (1 argument) Niciunul. ISTORIC getpgid() setpgid() getpgrp() (fara argumente) POSIX.1-2001. setpgrp() (ara argumente) POSIX.1-2001. Obsoleta in POSIX.1-2008. Eliminata in POSIX.1-2024. setpgrp() (2 argumente) getpgrp() (1 argument) 4.2BSD. NOTE Un proces-copil creat prin fork(2) motenete ID-ul grupului de procese al parintelui sau. PGID-ul este pastrat in cazul unui execve(2). Fiecare grup de procese este membru al unei sesiuni, iar fiecare proces este membru al sesiunii din care face parte grupul sau de procese; (a se vedea credentials(7)). O sesiune poate avea un terminal de control. In orice moment, unul (i numai unul) dintre grupurile de procese din sesiune poate fi grupul de procese de prim-plan pentru terminal; celelalte grupuri de procese sunt in fundal. In cazul in care un semnal este generat de terminal (de exemplu, tastarea tastei de intrerupere pentru a genera SIGINT), semnalul respectiv este trimis catre grupul de procese din prim-plan; (a se vedea termios(3) pentru o descriere a caracterelor care genereaza semnale). Numai grupul de procese din prim-plan poate citi ,,read(2)" de pe terminal; daca un grup de procese din fundal incearca sa citeasca ,,read(2)" de la terminal, atunci grupului i se trimite un semnal SIGTTIN, care il suspenda. Funciile tcgetpgrp(3) i tcsetpgrp(3) sunt utilizate pentru a obine/stabili grupul de procese in prim-plan al terminalului de control. Apelurile setpgid() i getpgrp() sunt utilizate de programe cum ar fi bash(1) pentru a crea grupuri de procese pentru a implementa controlul lucrarilor de shell. In cazul in care terminarea unui proces face ca un grup de procese sa devina orfan i daca orice membru al grupului de procese devenit orfan este oprit, atunci un semnal SIGHUP urmat de un semnal SIGCONT va fi trimis fiecarui proces din grupul de procese devenit orfan. Un grup de procese orfan este un grup in care parintele fiecarui membru al grupului de procese este fie el insui membru al grupului de procese, fie este membru al unui grup de procese intr-o sesiune diferita (a se vedea, de asemenea, credentials(7)). CONSULTAI I getuid(2), setsid(2), tcgetpgrp(3), tcsetpgrp(3), termios(3), credentials(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.18 8 februarie 2026 setpgid(2)