sigprocmask(2)

NUME
sigprocmask, rt_sigprocmask, rt_sigprocmask - examinează și modifică semnalele blocate

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <signal.h>

/* Prototip pentru funcția de învăluire glibc */
int sigprocmask(int how, const sigset_t *_Nullable restrict set,
                           sigset_t *_Nullable restrict oldset);

#include <signal.h>           /* Definiția constantelor SIG_* */
#include <sys/syscall.h>      /* Definiția constantelor SYS_* */
#include <unistd.h>

/* Prototip pentru apelul de sistem subiacent */
int syscall(SYS_rt_sigprocmask, int how,
                           const kernel_sigset_t *_Nullable set,
                           kernel_sigset_t *_Nullable oldset,
                           size_t sigsetsize);

/* Prototip pentru apelul de sistem vechi */
[[depreciat]] int syscall(SYS_sigprocmask, int how,
                           const old_kernel_sigset_t *_Nullable set,
                           old_kernel_sigset_t *_Nullable oldset);

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

sigprocmask():
    _POSIX_C_SOURCE

DESCRIERE
sigprocmask() este utilizat pentru a prelua și/sau modifica masca de semnal a firului apelant. Masca de semnal este setul de semnale a căror livrare este blocată în prezent pentru apelant (a se vedea, de asemenea, signal(7) pentru mai multe detalii).

Comportamentul apelului depinde de valoarea lui how, după cum urmează.

SIG_BLOCK
    Setul de semnale blocate este uniunea dintre setul curent și argumentul set.

SIG_UNBLOCK
    Semnalele din set sunt eliminate din setul curent de semnale blocate. Este permisă încercarea de deblocare a unui semnal care nu este blocat.

SIG_SETMASK
    Setul de semnale blocate este stabilit la argumentul set.

Dacă oldset nu este NULL, valoarea anterioară a măștii de semnal este stocată în oldset.

Dacă set este NULL, atunci masca de semnal este neschimbată (adică how este ignorat), dar valoarea curentă a măștii de semnal este totuși returnată în oldset (dacă nu este NULL).

Un set de funcții pentru modificarea și inspectarea variabilelor de tip sigset_t („seturi de semnale”) este descris în sigsetops(3).

Utilizarea lui sigprocmask() este nespecificată într-un proces cu mai multe fire; a se vedea pthread_sigmask(3).

VALOAREA RETURNATĂ
sigprocmask() returnează 0 în caz de succes. În caz de eșec, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

EFAULT
    Argumentul set sau oldset indică în afara spațiului de adrese alocat procesului.

EINVAL
    Fie valoarea specificată în how nu a fost validă, fie nucleul nu suportă dimensiunea transmisă în sigsetsize.

VERSIUNI

  Diferențe între biblioteca C și nucleu
Definiția nucleului pentru sigset_t diferă în ceea ce privește dimensiunea față de cea utilizată de biblioteca C. În această pagină de manual, prima este denumită kernel_sigset_t (este cu toate acestea denumită sigset_t în sursele nucleului).

Funcția glibc pentru sigprocmask() ignoră în tăcere încercările de a bloca cele două semnale în timp real care sunt utilizate în mod intern de către implementarea NPTL threading. A se vedea nptl(7) pentru detalii.

Apelul original al sistemului Linux a fost numit sigprocmask(). Cu toate acestea, odată cu adăugarea semnalelor în timp real în Linux 2.2, tipul de dimensiune fixă, pe 32 de biți sigset_t (denumit old_kernel_sigset_t în această pagină de manual), acceptat de acest apel de sistem, nu mai era adecvat scopului. În consecință, a fost adăugat un nou apel de sistem, rt_sigprocmask(), pentru a permite acceptarea unui tip sigset_t mărit (denumit kernel_sigset_t în această pagină de manual). Noul apel de sistem primește un al patrulea argument, size_t sigsetsize, care specifică dimensiunea în octeți a seturilor de semnale din set și oldset. În prezent, se cere ca acest argument să aibă o valoare fixă specifică arhitecturii (egală cu sizeof(kernel_sigset_t)).

Funcția de învăluire glibc sigprocmask() ascunde aceste detalii de noi, apelând în mod transparent rt_sigprocmask() atunci când nucleul o furnizează.

STANDARDE
POSIX.1-2024.

ISTORIC
POSIX.1-2001.

NOTE
Nu este posibil să se blocheze SIGKILL sau SIGSTOP. Încercările de a face acest lucru sunt ignorate în tăcere.

Fiecare dintre firele de execuție dintr-un proces are propria mască de semnal.

Un copil creat prin fork(2) moștenește o copie a măștii de semnal a părintelui său; masca de semnal este păstrată în execve(2).

Dacă SIGBUS, SIGFPE, SIGILL sau SIGSEGV sunt generate în timp ce sunt blocate, rezultatul este nedefinit, cu excepția cazului în care semnalul a fost generat de kill(2), sigqueue(3) sau raise(3).

A se vedea sigsetops(3) pentru detalii privind manipularea seturilor de semnale.

Rețineți că este permisă (deși nu este foarte utilă) specificarea atât a lui set, cât și a lui oldset ca fiind NULL.

CONSULTAȚI ȘI
kill(2), pause(2), sigaction(2), signal(2), sigpending(2), sigsuspend(2), pthread_sigmask(3), sigqueue(3), sigsetops(3), signal(7)

TRADUCERE
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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.