Provided by: manpages-nl-dev_4.27.0-1_all bug

NAAM

       sigaction, rt_sigaction - onderzoek en verander een signaal actie

BIBLIOTHEEK

       Standard C bibliotheek  (libc, -lc)

SAMENVATTING

       #include <stdio.h>

       int sigaction(int signum, const struct sigaction *restrict act,
                     struct sigaction *_NULL_baar restrict oudeact);

   Feature Test Macro´s eisen in  glibc (zie feature_test_macros(7)):

       sigaction():
           _POSIX_C_SOURCE

       siginfo_t:
           _POSIX_C_SOURCE >= 199309L

BESCHRIJVING

       De  sigaction() systeem aanroep wordt gebruikt om de te nemen actie door een proces bij ontvangst van een
       signaal te veranderen. (Zie signal(7) voor een overzicht van de signalen.)

       signum bepaald het signaal en kan elk geldig signaal zijn behalve SIGKILL en SIGSTOP.

       Als act on-gelijk nul is wordt de nieuwe actie voor het signaal signum geïnstalleerd van act. Als oudeact
       niet-nul is, dan wordt de vorige actie bewaard in oudeact.

       De sigaction structuur is bepaald als

           struct sigaction {
               void     (*sa_handler)(int);
               void     (*sa_sigaction)(int, siginfo_t *, void *);
               sigset_t   sa_mask;
               int        sa_flags;
               void     (*sa_restorer)(void);
           };

       Op sommige architecturen wordt een union gebruikt: ken niet aan beiden sa_handler en sa_sigaction toe

       Het sa_restorer veld is is niet bedoeld voor gebruik in applicaties. (POSIX specificeert het  sa_restorer
       veld niet.) Meer details over het doel van dit veld kunnen worden gevonden in sigreturn(2)

       sa_handler specificeert de actie die wordt geassocieerd met signum en die kan een van de volgende zijn:

       •  SIG_DFL voor de standaard actie.

       •  SIG_IGN om dit signaal te negeren.

       •  Een  wijzen naar een signaal afhandel functie. Deze functie ontvangt het signaal nummer als zijn enige
          argument.

       Als SA_SIGINFO werd opgegeven in sa_flags dan specificeert sa_sigaction (in plaats   van  sa_handler)  de
       signaal afhandel functie voor signum. Deze functie ontvangt drie argumenten zoals hieronder beschreven.

       sa_mask  specificeert  een  masker voor signalen die geblokkeerd zouden moeten worden (dat is, toegevoegd
       aan een signaal masker van de thread in welke de  signaal  afhandelaar  wordt  aangeroepen)   tijdens  de
       uitvoering  van  de  signaal afhandelaar. In toevoeging daarop zal het signaal dat de behandelaar af liet
       gaan geblokkeerd worden, tenzij de SA_NODEFER vlag werd gebruikt.

       sa_flags geeft een aantal vlaggen op die het gedrag van het signaal behandelings  proces  aanpassen.  Het
       wordt gevormd door de bitsgewijze OF van nul of meer van het volgende:

       SA_NOCLDSTOP
              Als  signum  SIGCHLD is, ontvang geen bericht wanneer kind processen stoppen (dat is, wanneer deze
              een van SIGSTOP, SIGTSTP, SIGTTIN of SIGTTOU ontvangen) of ga door (dat is, ze ontvangen  SIGCONT)
              (zie  wait(2)).  Deze  vlag  is  alleen  van  betekenis bij het inrichten van een afhandelaar voor
              SIGCHLD.

       SA_NOCLDWAIT (sinds Linux 2.6)
              Als signum gelijk is aan SIGCHLD transformeer dan kinderen niet in zombies wanneer  zij  eindigen.
              Zie  ook waitpid(2).  Deze vlag is alleen van betekenis bij het inrichten van een afhandelaar voor
              SIGCHLD, of bij het zetten van een signaal dispositie op SIG_DFL.

              Als de SA_NOCLDWAIT vlag werd gezet bij het inrichten van een afhandelaar voor SIGCHLD,  dan  laat
              POSIX.1  het  ongespecificeerd  of  een  SIGCHLD  signaal  wordt gegenereerd zodra een kind proces
              eindigt.  Op Linux, wordt een SIGCHLD  in dit geval gegenereerd; op sommige andere  implementaties
              is dit niet het geval .

       SA_NODEFER
              Voeg  geen  signaal  toe  aan  het  thread signaal masker terwijl de afhandelaar wordt uitgevoerd,
              behalve als het signaal werd opgegeven in act.sa_mask.  Bijgevolg mag een volgende  instantie  van
              het  signaal  worden  afgeleverd  bij de thread terwijl deze de afhandelaar uitvoert. Deze vlag is
              alleen van betekenis bij het inrichten van de signaal afhandelaar.

              SA_NOMASK is een overbodig, niet-standaard synoniem voor deze vlag.

       SA_ONSTACK
              Roep de signaal afhandelaar aan op een alternatieve stack voorzien door signalstack(2). Indien een
              alternatieve stack niet beschikbaar is, dan wordt de standaard stack gebruikt. Deze vlag is alleen
              van betekenis bij het inrichten van een signaal afhandelaar.

       SA_RESETHAND
              Herstel de signaal actie naar de standaard bij het binnengaan in de signaal afhandelaar. Deze vlag
              is alleen van betekenis bij het inrichten van een signaal afhandelaar.

              SA_ONESHOT is een verouderd, niet-standaard synoniem voor deze vlag.

       SA_RESTART
              Voorzie in gedrag overeenkomend  met  BSD  signaal-semantiek  bij  het  herstartbaar  maken  langs
              signalen  van  bepaalde  systeem aanroepen. Deze vlag heeft alleen betekenis bij het inrichten van
              een signaal afhandelaar. Zie signal(7) voor een discussie over  het  herstarten  van  een  systeem
              aanroep.

       SA_RESTORER
              Not  intended  for  application use. Deze vlag wordt gebruikt door C bibliotheken om  aan te geven
              dat het sa_restorer veld het adres van een "signaal trampoline"  bevat.   Zie  sigreturn(2)   voor
              meer details.

       SA_SIGINFO (sinds Linux 2.2)
              De signaal afhandelaar neemt drie argumenten, niet een. In dit geval zou sa_sigaction gezet moeten
              zijn  in  plaats  van  sa_handler.  Deze vlaggen is alleen van betekenis bij het inrichten van een
              signaal afhandelaar.

       SA_UNSUPPORTED (vanaf Linux 5.11)
              Gebruikt om dynamisch op vlag bit ondersteuning te polsen.

              Zodra een poging om een afhandelaar te registreren slaagde met deze vlag  gezet  in  act->sa_flags
              samen met andere vlaggen die potentieel niet ondersteund worden door de kernel, dan zal een meteen
              opeenvolgende  sigaction()  aanroep  die hetzelfde signaal nummer opgeeft en een niet-NULL oudeact
              argument resulteren in een SA_UNSUPPORTED clear in oudeact->sa_flags, waarna oudeact->sa_flags mag
              worden gebruikt als een bit-masker beschrijvend welke van de potentieel niet ondersteunde  vlaggen
              in  feite  wél worden ondersteund. Zie de sectie "Dynamisch polsen op vlag bit ondersteuning" voor
              meer details.

       SA_EXPOSE_TAGBITS (vanaf Linux 5.11)
              Normaliter, wordt bij het  afleveren  van  een  signaal  een  architecture-specifieke  verzameling
              tag-bits   gewist  in  het   si_addr  veld  van  siginfo_t.  Als  deze vlag is gezet dan wordt een
              architecture-specifieke deelverzameling van de tag-bits behouden in si_addr.

              Programma´s die overdraagbaar moeten zijn met Linux versies ouder dan 5.11  moeten  SA_UNSUPPORTED
              gebruiken om te testen op ondersteuning.

   Het siginfo_t argument voor een SA_SIGINFO afhandelaar
       Indien  de  SA_SIGINFO   vlag  werd gespecificeerd in act.sa_flags dan wordt het adres van de afhandelaar
       doorgegeven via het act.sa_sigaction veld. Deze afhandelaar heeft drie argumenten, die zijn als volgt:

           void
           handler(int sig, siginfo_t *info, void *ucontext)
           {
               ...
           }

       Deze drie argumenten zijn als volgt

       sig    Het nummer van het signaal de de aanroep van de afhandelaar veroorzaakte.

       info   Een wijzer naar een siginfo_t, hetgeen een structure is die  verdere  informatie  bevat  over  het
              hieronder beschreven signaal.

       ucontext
              Dit  is  een wijzer naar een ucontext_t structure, cast naar void *.  De structure aangewezen door
              dit veld bevat signaal context informatie die werd bewaard in de gebruikers-stack door de  kernel;
              zie sigreturn(2) voor details. Verdere informatie over de ucontext_t structure kan worden gevonden
              in  getcontext(3)  en signal(7). In het algemeen maakt de afhandelaar functie geen gebruik van het
              derde argument.

       Het siginfo_t data type is een structure met de volgende velden:

           siginfo_t {
               int      si_signo;     /* Signaal nummer */
               int      si_errno;     /* Een fout waarde */
               int      si_code;      /* Signaal code */
               int      si_trapno;    /* Trap nummer dat het
                                         hardware-gegenereerde signaal veroorzaakte
                                         (ongebruikt op de meeste architecturen) */
               pid_t    si_pid;       /* proces ID van de zender*/
               uid_t    si_uid;       /* Huidig UID van zendende proces */
               int      si_status;    /* Exit waarde of signaal */
               clock_t  si_utime;     /* Gebruikte User tijd */
               clock_t  si_stime;     /* Gebruikte Systeem tijd  */
               union sigval si_value; /* Signaal waarde */
               int      si_int;       /* POSIX.1b signal */
               void    *si_ptr;       /* POSIX.1b signal */
               int      si_overrun;   /* Timer overrun teller;
                                         POSIX.1b timers */
               int      si_timerid;   /* Timer ID; POSIX.1b timers */
               void    *si_addr;      /* Geheugen locatie die fout veroorzaakte */
               long     si_band;      /* Band gebeurtenis (was int in
                                         glibc 2.3.2 en eerder) */
               int      si_fd;        /* Bestandsindicator */
               short    si_addr_lsb;  /* Minst significant bit van adres
                                         (vanaf Linux 2.6.32) */
               void    *si_lower;     /* Laagste grens bij adres schending
                                         occurred (vanaf Linux 3.19) */
               void    *si_upper;     /* Hoogste grens bij adres schending
                                         occurred (vanaf Linux 3.19) */
               int      si_pkey;      /* Beveiliging sleutel op PTE die fout
                                         veroorzaakte (vanaf Linux 4.6) */
               void    *si_call_addr; /* Addres van de systeem aanroep instructie
                                         (vanaf Linux 3.5) */
               int      si_syscall;   /* Aantal geprobeerde systeem aanroepen
                                         (vanaf Linux 3.5) */
               unsigned int si_arch;  /* Architecture van geprobeerde systeem aanroep
                                         (vanaf Linux 3.5) */
           }

       si_signo, si_errno en si_code zijn gedefinieerd voor alle signalen. (si_errno wordt in het algemeen  niet
       gebruikt  op Linux.)  De rest van de structure mag een union zijn, zodat men alleen die velden moet lezen
       die van betekenis zijn voor het gegeven signaal:

       •  Signalen verzonden met kill(2)  en sigqueue(3)  vullen si_pid ensi_uid in.  Daarnaast vullen  signalen
          verzonden  met   sigqueue(3)  si_int  en  si_ptr  in met de waarden opgegeven door de afzender van het
          signaal; zie sigqueue(3)  voor meer details.

       •  Signalen verzonden door POSIX.1b timers (vanaf Linux 2.6) vullen si_overrun  en  si_timerid  in.   Het
          si_timerid  veld  is een intern ID dat gebruikt wordt door de kernel om de timer te identificeren; dit
          is niet dezelfde als de timer ID die geretourneerd wordt door timer_create(2).  Het si_overrun veld is
          de  overloop  teler;  dit  is  dezelfde  informatie  die  wordt  verkregen  door   een   aanroep   van
          timer_getoverrun(2).  Deze velden zijn niet standaard Linux uitbreidingen.

       •  Signalen   verzonden  voor  berichten  rij  notificatie  (zie  de  beschrijving  van  SIGEV_SIGNAL  in
          mq_notify(3))  vul si_int/si_ptr in, met de sigev_value geleverd  aan  mq_notify(3);  si_pid,  met  de
          proces ID van de berichten afzender; en si_uid, met het echte gebruiker ID van de berichten afzender.

       •  SIGCHLD vult si_pid, si_uid, si_status, si_utime en si_stime in, informatie gevend over het kind.  Het
          si_pid  veld  is  het  proces  ID  van  het  kind; si_uid is het echte gebruikers ID van het kind. Het
          si_status veld bevat de eind status van het kind (als  si_code  gelijk  is  aan   CLD_EXITED)  of  het
          signaal  nummer  dat  de  status  verandering  van  het  proces veroorzaakte.  De si_utime en si_stime
          bevatten het gebruiker- en systeem CPU tijd gebruikt door het kind proces; deze velden  bevatten  niet
          de tijden gebruikt door het wachten-op kinderen (anders dan getrusage(2)  en times(2)). In kernels tot
          en  met  Linux  2.6  en  vanaf  Linux  2.6.27  rapporteren  deze  velden  CPU  tijd  in  eenheden  van
          sysconf(_SC_CLK_TCK). In Linux 2.6 kernels voor Linux 2.6.27 zorgde een bug  ervoor  dat  deze  velden
          tijden rapporteerde in eenheden van de (configureerbare) systeem jiffy (zie time(7)).

       •  SIGILL,  SIGFPE,  SIGSEGV,  SIGBUS, en SIGTRAP vullensi_addr in met het adres van de fout.  Op sommige
          architecturen, vullen deze signalen ook het si_trapno veld in.

          Sommige sub-fouten van SIGBUS, in het bijzonder BUS_MCEERR_AO en BUS_MCEERR_AR, vullen ook si_addr_lsb
          in. Dit veld geeft het minst significante bit aan van het gerapporteerde adres en  daarmee  de  omvang
          van  de  corruptie.  Bij  voorbeeld  als  een complete pagina werd gecorrumpeerd van bevat si_addr_lsb
          log2(sysconf(_SC_PAGESIZE)). Wanneer SIGTRAP werd afgeleverd als antwoord op een ptrace(2) gebeurtenis
          (PTRACE_EVENT_foo) dan wordt si_addr niet beschreven, maar worden  si_pid  en  si_uid  beschreven  met
          respectievelijk  het  proces  ID en gebruikers ID verantwoordelijk voor het leveren van de valkuil. In
          het geval  van  seccomp(2)  zal  de  gevolgde  die  de  gebeurtenis  geleverd  heeft  worden  getoond.
          BUS_MCEERR_* en si_addr_lsb zijn Linux-specifieke uitbreidingen.

          De SEGV_BNDERR sub-fout van SIGSEGV vult si_lower en si_upper.

          De SEGV_PKUERR sub-fout van SIGSEGV vult si_pkey.

       •  SIGIO/SIGPOLL  (de  twee  namen  zijn  synoniemen  op  Linux)  vullen si_band en si_fd in.  De si_band
          gebeurtenis is een bit masker dat dezelfde waarden bevat zoals  ingevuld  in  het  revents  veld  door
          poll(2).   Het  si_fd veld geeft de bestandsindicator voor welke de Invoer/Uitvoer gebeurtenis optrad;
          zie voor verdere details de beschrijving van F_SETSIG in fcntl(2).

       •  SIGSYS wordt gegenereerd (vanaf Linux 3.5) zodra een seccomp filter  SECCOMP_RET_TRAP  terugkeert,  en
          vult si_call_addr, si_syscall, si_arch, si_errno in, en andere velden zoals beschreven in seccomp(2).

   Het si_code veld
       Het  si_code  veld  in  het  siginfo_t  argument,  dat  wordt  doorgegeven  naar  een  SA_SIGINFO signaal
       afhandelaar, is een waarde (geen bit masker) die aangeeft waarom dit signaal  werd  verstuurd.  Voor  een
       ptrace(2) gebeurtenis zal si_code SIGTRAP bevatten en heeft een ptrace gebeurtenis in het hoge byte:

           (SIGTRAP | PTRACE_EVENT_foo << 8).

       Voor  een  niet-ptrace gebeurtenis, worden de waarden die kunnen verschijnen in si_code beschreven in het
       vervolg van deze sectie. Vanaf glibc 2.20 worden de definities  van  de  meeste  symbolen  verkregen  uit
       <signal.h>   door het definiëren van feature test macro´s (vóór het invoegen van enig header bestand) als
       volgt:

       •  _XOPEN_SOURCE met een waarde van 500 of groter;

       •  _XOPEN_SOURCE en _XOPEN_SOURCE_EXTENDED; of

       •  _POSIX_C_SOURCE met een waarde van 200809L of groter.

       Voor de  TRAP_* constanten worden de symbool definities alleen in de eerste twee gevallen voorzien.  Voor
       glibc 2.20 werden geen feature test macro´s vereist om deze symbolen te verkrijgen.

       Voor  een regulier signaal toont de volgende lijst de waarden die kunnen worden geplaatst in si_code voor
       elk signaal, samen met de reden waarom dat signaal werd gegenereerd.

           SI_USER
                  kill(2).

           SI_KERNEL
                  Verzonden door de kernel.

           SI_QUEUE
                  sigqueue(3).

           SI_TIMER
                  POSIX timer liep af.

           SI_MESGQ (sinds Linux 2.6.6)
                  POSIX berichten rij toestand veranderde; zie mq_notify(3).

           SI_ASYNCIO
                  AIO voltooid.

           SI_SIGIO
                  SIGIO in wachtrij (tot en met Linux 2.2; vanaf Linux 2.4 vult SIGIO/SIGPOLL si_code  in  zoals
                  hieronder beschreven).

           SI_TKILL (vanaf Linux 2.4.19)
                  tkill(2) of tgkill(2).

       De volgende waarden kunnen worden geplaatst in si_code voor een SIGILL signaal:

           ILL_ILLOPC
                  Ongeldige opcode.

           ILL_ILLOPN
                  Ongeldige operand.

           ILL_ILLADR
                  Ongeldige adresseer "mode".

           ILL_ILLTRP
                  Ongeldige valkuil.

           ILL_PRVOPC
                  Geprivilegieerde opcode.

           ILL_PRVREG
                  Geprivilegieerd register.

           ILL_COPROC
                  Hulpprocessor fout.

           ILL_BADSTK
                  Inwendige stapel fout.

       De volgende waarden kunnen worden geplaatst in si_code voor een SIGFPE signaal:

           FPE_INTDIV
                  Geheel getal delen door nul.

           FPE_INTOVF
                  Geheel getal overloop.

           FPE_FLTDIV
                  Drijvende komma deel door nul.

           FPE_FLTOVF
                  Drijvende komma overloop.

           FPE_FLTUND
                  Drijvende komma onderloop.

           FPE_FLTRES
                  Drijvende komma onprecies antwoord.

           FPE_FLTINV
                  Drijvende komma ongeldige operatie.

           FPE_FLTSUB
                  Index buiten bereik.

       De volgende waarden kunnen worden geplaatst in  si_code voor een SIGSEGV signaal:

           SEGV_MAPERR
                  Adres niet verbonden met object.

           SEGV_ACCERR
                  Ongeldige toestemmingen voor "mapped" object.

           SEGV_BNDERR (sinds Linux 3.19)
                  Gefaalde adresgrenzen controles.

           SEGV_PKUERR (sinds Linux 4.6)
                  Toegang  werd  geweigerd  voor  geheugen  bescherming  sleutels. Zie pkeys(7).  de bescherming
                  sleutel die van toepassing was op deze toegang is beschikbaar via si_pkey.

       De volgende waarden kunnen worden geplaatst in si_code voor een SIGBUS signaal:

           BUS_ADRALN
                  Ongeldige adres oplijning.

           BUS_ADRERR
                  Niet bestaand fysiek adres.

           BUS_OBJERR
                  Object-eigen "hardware" fout.

           BUS_MCEERR_AR (sinds Linux 2.6.32)
                  Hardware geheugen fout verwerkt bij een machine controle; actie vereist.

           BUS_MCEERR_AO (sinds Linux 2.6.32)
                  Hardware geheugen fout gedetecteerd in een proces maar niet verwerkt; actie is optioneel.

       De volgende waarden kunnen worden geplaatst in si_code voor een SIGTRAP signaal:

           TRAP_BRKPT
                  Proces breekpunt.

           TRAP_TRACE
                  Proces volgpunt valkuil.

           TRAP_BRANCH (vanaf Linux 2.4, IA64 only)
                  Genomen proces aftak valkuil.

           TRAP_HWBKPT (vanaf Linux 2.4, IA64 only)
                  Hardware breekpunt/watchpoint.

       De volgende waarden kunnen worden geplaatste in si_code voor een SIGCHLD signaal:

           CLD_EXITED
                  Kind is beëindigd.

           CLD_KILLED
                  Kind was vermoord.

           CLD_DUMPED
                  Kind eindigde abnormaal.

           CLD_TRAPPED
                  Gevolgd kind viel in valkuil.

           CLD_STOPPED
                  Kind is gestopt.

           CLD_CONTINUED (sinds Linux 2.6.9)
                  Gestopt kind is doorgegaan.

       De volgende waarden kunnen worden gezet in  si_code voor een SIGIO/SIGPOLL signaal:

           POLL_IN
                  Gegevens invoer beschikbaar.

           POLL_OUT
                  Uitvoer buffers beschikbaar.

           POLL_MSG
                  Invoer bericht beschikbaar.

           POLL_ERR
                  In/uit fout.

           POLL_PRI
                  Hoge prioriteit invoer beschikbaar.

           POLL_HUP
                  Apparaat los gemaakt.

       De volgende waarde kan worden geplaatst in si_code voor een SIGSYS signaal:

           SYS_SECCOMP (sinds Linux 3.5)
                  Getriggerd door een seccomp(2) filter regel

   Dynamisch polsen op vlag bit ondersteuning
       De sigaction() aanroep in Linux accepteert onbekende bits gezet in act->sa_flags  zonder  een  fout.  Het
       gedrag  van  de kernel vanaf Linux 5.11 is dat een tweede sigaction() onbekende bits in oudeact->sa_flags
       zal wissen. Echter, historisch, zou een tweede sigaction() aanroep  deze  bits  typisch  gezet  laten  in
       oudeact->sa_flags.

       Dit  betekent  dat  ondersteuning  van  nieuwe vlaggen niet kan worden gedetecteerd door het eenvoudigweg
       testen van vlaggen in sa_flags, en een programma moet testen dat SA_UNSUPPORTED gewist werd  voordat  het
       kan vertrouwen op de inhoud van sa_flags.

       Omdat  het  gedrag van de signaal afhandelaar niet kan worden gegarandeerd behalve als de test slaagt, is
       het slim om ofwel het betrokken signaal te blokkeren terwijl de afhandelaar  geregistreerd  wordt  en  in
       geval  de  controle  uit  te  voeren,  ofwel  indien  dit  niet mogelijk is, bijvoorbeeld als het signaal
       synchroon is, om een tweede sigaction() te maken in de signaal afhandelaar zelf.

       In kernels die geen specifieke vlag ondersteunen, gedraagt de kernel  zich  alsof  deze  vlag  niet  werd
       gezet, zelfs als de vlag werd gezet in act->sa_flags.

       De  vlaggen  SA_NOCLDSTOP, SA_NOCLDWAIT, SA_SIGINFO, SA_ONSTACK, SA_RESTART, SA_NODEFER, SA_RESETHAND, en
       indien gedefinieerd door  dearchitectuur,  SA_RESTORER  mogen  niet  betrouwbaar  getest  worden  om  dit
       mechanisme  te  gebruiken, omdat ze geïntroduceerd werden voor Linux 5.11. Echter programma´s mogen er in
       het algemeen vanuit gaan dat deze vlaggen ondersteund worden, omdat ze  allen  ondersteund  werden  vanaf
       Linux 2.6, dat werd vrijgegeven in het jaar 2003.

       Zie VOORBEELDEN hieronder voor de demonstratie van het gebruik van SA_UNSUPPORTED.

EIND WAARDE

       Bij  succes  geeft  sigaction()  nul  terug.  Bij falen wordt -1 teruggegeven en wordt errno naar behoren
       gezet.

FOUTEN

       EFAULT act of oudeact wijzen naar geheugen dat niet een geldig onderdeel van de proces adres ruimte is.

       EINVAL Een ongeldig signaal werd opgegeven. Dit zal ook voortgebracht worden als een poging wordt  gedaan
              om de actie voor SIGKILL of SIGSTOP te veranderen, die niet gevangen kunnen worden.

VERSIES

   C library/kernel verschillen
       De  glibc  omwikkel  functie  voor  sigaction()  meldt een fout (EINVAL) bij pogingen om de dispositie te
       veranderen van de twee realtime signalen die intern worden gebruikt door de NPTL threading implementatie.
       Zie nptl(7)  voor details.

       Op architecturen waar de signaal trampoline zich in de C bibliotheek bevindt, plaatst de  glibc  omwikkel
       functie  voor  sigaction()  het  adres  van  de  trampoline  code  in  het act.sa_restorer veld en zet de
       SA_RESTORER vlag in het act.sa_flags veld.  Zie sigreturn(2).

       De originele Linux systeem aanroep was sigaction(). Echter met het toevoegen  van  realtime  signalen  in
       Linux  2.2  was  het  vaste-grootte  32-bit  sigset_t type ondersteund door die systeem aanroep niet meer
       geschikt voor dit doel. Daarom werd de nieuwe systeem aanroep rt_sigaction()  toegevoegd  om  een  groter
       sigset_t  type  te  ondersteunen.  De  nieuwe  systeem  aanroep  benodigd   een  vierde  argument, size_t
       sigsetsize,  die  de  grootte  in  bytes  bepaald  van   de  signaal  verzamelingen  in  act.sa_mask   en
       oudeact.sa_mask. Dit argument vereist momenteel de waarde sizeof(sigset_t) (of de fout EINVAL waarde). De
       glibc sigaction() omwikkel functie verbergt deze details voor ons, door transparant rt_sigaction() aan te
       roepen wanneer de kernel daarin voorziet.

VOLDOET AAN

       POSIX.1-2008.

GESCHIEDENIS

       POSIX.1-2001, SVr4.

       POSIX.1-1990  stond  niet toe om de actie voor SIGCHLD op SIG_IGN te zetten.  POSIX.1-2001 en later stond
       dit toe, zodat het negeren van SIGCHLD kan worden  gebruikt  om  zombies  aan  te  maken  (zie  wait(2)).
       Desalniettemin  verschillen  de historische BSD en System V gedragingen voor negeren van  SIGCHLD, daarom
       is de enige compleet overdraagbare methode om te voorkomen dat  beëindigde  kinderen  zombies  worden  om
       signaal SIGCHLD op te vangen en het uitvoeren van een wait(2)  of vergelijkbaar.

       POSIX.1-1990   specificeerde   alleen   SA_NOCLDSTOP.    POSIX.1-2001  voegde  SA_NOCLDWAIT,  SA_NODEFER,
       SA_ONSTACK, SA_RESETHAND, SA_RESTART, en SA_SIGINFO als  XSI  extensies  toe.   POSIX.1-2008  verplaatste
       SA_NODEFER,  SA_RESETHAND,  SA_RESTART, en SA_SIGINFO naar de basis specificatie.  Gebruik van de laatste
       waarden in sa_flags is mogelijk minder overdraagbaar in applicaties die bedoeld  zijn  voor  oudere  UNIX
       implementaties.

       De SA_RESETHAND vlag is overdraagbaar met de SVr4 vlag met dezelfde naam.

       De  SA_NODEFER  vlag  is compatibel met de SVr4 vlag met dezelfde naam onder kernels 1.3.9 en nieuwer. Op
       oudere kernels liet de Linux-implementatie het ontvangen van elk signaal toe,  niet  alleen  dat  dat  we
       installeren (daarbij de sa_mask instelling overschrijvend).

OPMERKINGEN

       Een  kind  aangemaakt  met  fork(2)  erft een kopie van de signaal dispositie van zijn ouder. Tijdens een
       execcve(2) worden de disposities  van  de  afgehandelde  signalen  terug  gezet  naar  de  standaard;  de
       dispositie van de genegeerde signalen blijft onveranderd.

       Volgens  POSIX  is het gedrag van een proces ongedefinieerd als het een SIGFPE, SIGILL of SIGSEGV negeert
       dat niet voortgebracht werd door de kill() of de raise()  functies.  Heel  getal  delen  door  nul  heeft
       ongedefinieerd  gevolg.  Op  sommige architecturen zal het een SIGFPE signaal veroorzaken. (Ook het delen
       van het meest negatieve hele getal door -1 kan een SIGFPE veroorzaken.) Negeren van dit signaal  zou  tot
       een eindeloze lus kunnen leiden.

       sigaction()  kan  aangeroepen  worden  met  een  tweede  argument nul om de huidige signaalbehandelaar te
       ondervragen. Het kan ook gebruikt worden om te testen of een gegeven signaal geldig is  voor  de  huidige
       machine, door het aan te roepen met 'nul' tweede en derde argumenten.

       Het  is niet mogelijk om SIGKILL of SIGSTOP te blokkeren door opgeven in sa_mask. Pogingen om dat te doen
       zullen stilzwijgend genegeerd worden.

       Ze  sigsetops(3)  voor details hoe signaal verzamelingen te manipuleren.

       Zie signal-safety(7)  voor een lijst van de async-signal-safe functies die veilig gebruikt kunnen  worden
       binnen een signaal afhandelaar.

   Niet gedocumenteerd
       Voor de introductie van SA_SIGINFO, was het ook mogelijk om enige additionele informatie over het signaal
       te  verkrijgen.  Dit  werd  gedaan  door  het  voorzien een sa_handler signaal afhandelaar met een tweede
       argument van het type struct sigcontext, hetgeen dezelfde structure is als die die wordt  doorgegeven  in
       het  uc_mcontext  veld  van  de  ucontext  structure  die wordt doorgegeven (via een wijzer) in het derde
       argument van de sa_sigaction afhandelaar. Zie de relevante Linux kernel bronnen voor details. Dit gebruik
       is nu overbodig.

BUGS

       Tijdens het afleveren van een signaal met een SA_SIGINFO afhandelaar, voorziet de kernel niet  altijd  in
       betekenisvolle waarden voor alle velden in de siginfo_t die relevant zijn voor dat signaal.

       Tot en met Linux 2.6.13 voorkomt het opgeven van SA_NODEFER in sa_flags dat het afgeleverde signaal wordt
       gemaskeerd tijdens het uitvoeren van de afhandelaar, maar ook voor de signalen opgegeven in sa_mask. Deze
       bug werd opgelost in Linux 2.6.14.

VOORBEELDEN

       Zie mprotect(2).

   Het polsen van vlag ondersteuning.
       Het  volgende  voorbeeld programma eindigt met status EXIT_SUCCESS als besloten werd om SA_EXPOSE_TAGBITS
       te ondersteunen, en anders EXIT_FAILURE.

       #include <signal.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

       void
       handler(int signo, siginfo_t *info, void *context)
       {
           struct sigaction oldact;

           if (sigaction(SIGSEGV, NULL, &oldact) == -1
               || (oldact.sa_flags & SA_UNSUPPORTED)
               || !(oldact.sa_flags & SA_EXPOSE_TAGBITS))
           {
               _exit(EXIT_FAILURE);
           }
           _exit(EXIT_SUCCESS);
       }

       int
       main(void)
       {
           struct sigaction act = { 0 };

           act.sa_flags = SA_SIGINFO | SA_UNSUPPORTED | SA_EXPOSE_TAGBITS;
           act.sa_sigaction = &handler;
           if (sigaction(SIGSEGV, &act, NULL) == -1) {
               perror("sigaction");
               exit(EXIT_FAILURE);
           }

           raise(SIGSEGV);
       }

ZIE OOK

       kill(1),  kill(2),  pause(2),  pidfd_send_signal(2),  restart_syscall(2),   seccomp(2),   sigaltstack(2),
       signal(2),  signalfd(2),  sigpending(2), sigprocmask(2), sigreturn(2), sigsuspend(2), wait(2), killpg(3),
       raise(3), siginterrupt(3), sigqueue(3), sigsetops(3), sigvec(3), core(5), signal(7)

VERTALING

       De Nederlandse vertaling van deze handleiding is geschreven door Jos  Boersema  <joshb@xs4all.nl>,  Mario
       Blättermann <mario.blaettermann@gmail.com> en Luc Castermans <luc.castermans@gmail.com>

       Deze  vertaling  is  vrije  documentatie;  lees  de GNU General Public License Version 3 of later over de
       Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.

       Indien U fouten in de vertaling van deze handleiding zou  vinden,  stuur  een  e-mail  naar  debian-l10n-
       dutch@lists.debian.org.

Linux man-pagina's 6.9.1                           2 mei 2024                                       sigaction(2)