rt_sigqueueinfo(2)

NUME
rt_sigqueueinfo, rt_tgsigqueueinfo - pune în coada de așteptare un semnal și date

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <linux/signal.h>     /* Definirea constantelor SI_* */
#include <sys/syscall.h>      /* Definirea constantelo SYS_* */
#include <unistd.h>

int syscall(SYS_rt_sigqueueinfo, pid_t tgid,
            int sig, siginfo_t *info);
int syscall(SYS_rt_tgsigqueueinfo, pid_t tgid, pid_t tid,
            int sig, siginfo_t *info);

Notă: Nu există funcții de învăluire glibc pentru aceste apeluri de sistem; consultați NOTE.

DESCRIERE
Apelurile de sistem rt_sigqueueinfo() și rt_tgsigqueueinfo() sunt interfețele de nivel scăzut utilizate pentru a trimite un semnal plus date către un proces sau un fir de execuție. Receptorul semnalului poate obține datele însoțitoare prin stabilirea unui gestionar de semnal cu indicatorul sigaction(2) SA_SIGINFO.

Aceste apeluri de sistem nu sunt destinate utilizării directe de către aplicații; ele sunt furnizate pentru a permite implementarea sigqueue(3) și pthread_sigqueue(3).

Apelul de sistem rt_sigqueueinfo() trimite semnalul sig către grupul de fire cu ID-ul tgid; (termenul „grup de fire” este sinonim cu „proces”, iar tgid corespunde ID-ului tradițional de proces UNIX). Semnalul va fi transmis unui membru arbitrar al grupului de fire de execuție (adică unuia dintre firele de execuție care nu blochează în prezent semnalul).

Argumentul info specifică datele care trebuie să însoțească semnalul. Acest argument este un indicator către o structură de tip siginfo_t, descrisă în sigaction(2) (și definită prin includerea <sigaction.h>). Apelantul trebuie să definească următoarele câmpuri în această structură:

si_code
    Acesta ar trebui să fie unul dintre codurile SI_* din fișierul sursă al nucleului Linux include/asm-generic/siginfo.h. Dacă semnalul este trimis către orice alt proces decât apelantul însuși, se aplică următoarele restricții:

    •   Codul nu poate fi o valoare mai mare sau egală cu zero. În special, nu poate fi SI_USER, care este utilizat de nucleu pentru a indica un semnal trimis de kill(2), și nici nu poate fi SI_KERNEL, care este utilizat pentru a indica un semnal generat de nucleu.

    •   Codul nu poate fi (începând cu Linux 2.6.39) SI_TKILL, care este utilizat de nucleu pentru a indica un semnal trimis utilizând tgkill(2).

si_pid
    Acesta trebuie să fie definit la un ID de proces, de obicei ID-ul de proces al expeditorului.

si_uid
    Acesta trebuie definit la un ID de utilizator, de obicei ID-ul de utilizator real al emitentului.

si_value
    Acest câmp conține datele utilizatorului care trebuie să însoțească semnalul. Pentru mai multe informații, consultați descrierea ultimului argument (union sigval) din sigqueue(3).

Pe plan intern, nucleul stabilește câmpul si_signo la valoarea specificată în sig, astfel încât receptorul semnalului să poată obține și numărul semnalului prin intermediul acestui câmp.

Apelul de sistem rt_tgsigqueueinfo() este similar cu rt_sigqueueinfo(), dar trimite semnalul și datele către un singur fir specificat de combinația tgid, un ID de grup de fire și tid, un fir din acel grup de fire.

VALOAREA RETURNATĂ
În caz de succes, aceste apeluri de sistem returnează 0. În caz de eroare, acestea returnează -1 și errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

EAGAIN
    A fost atinsă limita de semnale care pot fi puse în coadă. A se vedea signal(7) pentru informații suplimentare.

EINVAL
    sig, tgid sau tid nu a fost valid.

EPERM
    Apelantul nu are permisiunea de a trimite semnalul către țintă. Pentru permisiunile necesare, consultați kill(2).

EPERM
    tgid specifică un alt proces decât apelantul și info->si_code nu este valid.

ESRCH
    rt_sigqueueinfo(): Nu a fost găsit niciun grup de fire care să corespundă tgid.

rt_tgsigqueinfo(): Nu a fost găsit niciun fir care să corespundă tgid și tid.

STANDARDE
Linux.

ISTORIC

rt_sigqueueinfo()
    Linux 2.2.

rt_tgsigqueueinfo()
    Linux 2.6.31.

NOTE
Deoarece aceste apeluri de sistem nu sunt destinate utilizării în aplicații, nu există funcții de învăluire glibc; utilizați syscall(2) în cazul puțin probabil în care doriți să le apelați direct.

Ca și în cazul kill(2), semnalul nul (0) poate fi utilizat pentru a verifica dacă procesul sau firul specificat există.

CONSULTAȚI ȘI
kill(2), pidfd_send_signal(2), sigaction(2), sigprocmask(2), tgkill(2), pthread_sigqueue(3), sigqueue(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.