setpgid(2) System Calls Manual setpgid(2)

setpgid, getpgid, setpgrp, getpgrp - stabilește/obține grupul de procese

Biblioteca C standard (libc, -lc)

#include <unistd.h>
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 */
Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

getpgid():

    _XOPEN_SOURCE >= 500
        || /* Începând cu glibc 2.12: */ _POSIX_C_SOURCE >= 200809L

setpgrp() (POSIX.1):

    _XOPEN_SOURCE >= 500
        || /* Începând cu glibc 2.19: */ _DEFAULT_SOURCE
        || /* glibc <= 2.19: */ _SVID_SOURCE

setpgrp() (BSD), getpgrp() (BSD):

    [Acestea sunt disponibile doar înainte de glibc 2.19]
    _BSD_SOURCE &&
        ! (_POSIX_SOURCE || _POSIX_C_SOURCE || _XOPEN_SOURCE
            || _GNU_SOURCE || _SVID_SOURCE)

Toate aceste interfețe sunt disponibile pe Linux și sunt utilizate pentru a obține și stabili ID-ul grupului de procese (PGID) al unui proces. Modalitățile preferate, specificate în POSIX.1, de a face acest lucru sunt: getpgrp(void), pentru a obține PGID-ul procesului apelant; și setpgid(), pentru a stabili PGID-ul unui proces.

setpgid() stabilește PGID-ul procesului specificat de pid la pgid. Dacă pid este zero, atunci se utilizează ID-ul de proces al procesului apelant. Dacă pgid este zero, atunci PGID-ul procesului specificat de pid devine identic cu ID-ul său de proces. În cazul în care setpgid() este utilizat pentru a muta un proces dintr-un grup de procese în altul (așa cum fac unele shell-uri la crearea de conducte), ambele grupuri de procese trebuie să facă parte din aceeași sesiune (a se vedea setsid(2) și credentials(7)). În acest caz, pgid specifică un grup de procese existent la care urmează să se alăture, iar ID-ul de sesiune al acelui grup trebuie să corespundă cu ID-ul de sesiune al procesului care se alătură.

Versiunea POSIX.1 a getpgrp(), care nu primește argumente, returnează PGID-ul procesului apelant.

getpgid() returnează PGID-ul procesului specificat de pid. În cazul în care pid este zero, se utilizează ID-ul de proces al procesului apelant; (recuperarea PGID-ului unui proces, altul decât cel care face apelul, este rareori necesară, iar POSIX.1 getpgrp() este preferat pentru această sarcină).

setpgrp() în stil System V, care nu primește argumente, este echivalent cu setpgid(0, 0).

Apelul specific BSD setpgrp(), care primește argumentele pid și pgid, este o funcție de învăluire care apelează


setpgid(pid, pgid)

Începând cu glibc 2.19, funcția setpgrp() specifică BSD nu mai este expusă de <unistd.h>; apelurile trebuie înlocuite cu apelul setpgid() prezentat mai sus.

Apelul specific BSD getpgrp(), care primește un singur argument pid, este o funcție de învăluire care apelează


getpgid(pid)

Începând cu glibc 2.19, funcția specifică BSD getpgrp() nu mai este expusă de <unistd.h>; apelurile ar trebui înlocuite cu apeluri la POSIX.1 getpgrp() care nu primește argumente (dacă intenția este de a obține PGID-ul apelantului), sau cu apelul getpgid() prezentat mai sus.

În caz de succes, setpgid() și setpgrp() returnează zero. În caz de eroare, se returnează -1, și errno este configurată pentru a indica eroarea.

POSIX.1 getpgrp() returnează întotdeauna PGID-ul apelantului.

getpgid() și getpgrp(), specific BSD, returnează un grup de procese în caz de succes. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

S-a încercat 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()).
pgid este mai mic decât 0 (setpgid(), setpgrp()).
S-a încercat mutarea unui proces într-un grup de procese dintr-o sesiune diferită sau modificarea ID-ului grupului de procese al unuia dintre procesele-copil ale procesului apelant, iar procesul-copil se afla într-o sesiune diferită, sau modificarea ID-ului grupului de procese al unui lider de sesiune (setpgid(), setpgrp()).
Grupul de procese țintă nu există. (setpgid(), setpgrp()).
Pentru getpgid(): pid nu se potrivește cu niciun proces. Pentru setpgid(): pid nu este procesul apelant și nu este un copil al procesului apelant.

POSIX.1-2008 (dar vedeți secțiunea ISTORIC).
Niciunul.

POSIX.1-2001.
POSIX.1-2001. POSIX.1-2008 îl marchează ca obsolet.
4.2BSD.

Un proces-copil creat prin fork(2) moștenește ID-ul grupului de procese al părintelui său. PGID-ul este păstrat în 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 său de procese; (a se vedea credentials(7)).

O sesiune poate avea un terminal de control. În 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 în fundal. În cazul în care un semnal este generat de terminal (de exemplu, tastarea tastei de întrerupere pentru a genera SIGINT), semnalul respectiv este trimis către grupul de procese din prim-plan; (a se vedea termios(3) pentru o descriere a caracterelor care generează semnale). Numai grupul de procese din prim-plan poate citi „read(2)” de pe terminal; dacă un grup de procese din fundal încearcă să citească „read(2)” de la terminal, atunci grupului i se trimite un semnal SIGTTIN, care îl suspendă. Funcțiile tcgetpgrp(3) și tcsetpgrp(3) sunt utilizate pentru a obține/stabili grupul de procese în 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 lucrărilor de shell.

În cazul în care terminarea unui proces face ca un grup de procese să devină orfan și dacă orice membru al grupului de procese devenit orfan este oprit, atunci un semnal SIGHUP urmat de un semnal SIGCONT va fi trimis fiecărui proces din grupul de procese devenit orfan. Un grup de procese orfan este un grup în care părintele fiecărui membru al grupului de procese este fie el însuși membru al grupului de procese, fie este membru al unui grup de procese într-o sesiune diferită (a se vedea, de asemenea, credentials(7)).

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

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

2 mai 2024 Pagini de manual de Linux 6.8