Scroll to navigation

sigprocmask(2) System Calls Manual 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ă.

Setul de semnale blocate este uniunea dintre setul curent și argumentul set.
Semnalele din set sunt eliminate din setul curent de semnale blocate. Este permisă încercarea de deblocare a unui semnal care nu este blocat.
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

Argumentul set sau oldset indică în afara spațiului de adrese alocat procesului.
Fie valoarea specificată în how nu a fost validă, fie nucleul nu suportă dimensiunea transmisă în sigsetsize.

STANDARDE

POSIX.1-2001, POSIX.1-2008.

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.

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

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

3 decembrie 2022 Pagini de manual de Linux 6.03