Provided by: manpages-nl-dev_4.15.0-9_all bug

NAAM

       sigaction, rt_sigaction - onderzoek en verander een signaal actie

SAMENVATTING

       #include <stdio.h>

       int sigaction(int signum, const struct sigaction *restrict act,
                     struct sigaction *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 dat is een van de
       volgende:

       * 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
         2.6  en  vanaf   2.6.27   rapporteren   deze   velden   CPU   tijd   in   eenheden   van
         sysconf(_SC_CLK_TCK).  In  2.6 kernels voor 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 (alleen in kernels 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.

VOLDOET AAN

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

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.

       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_NOCLDSTOP,
       SA_NOCLDWAIT,  SA_NODEFER,  SA_ONSTACK,  SA_RESETHAND, SA_RESTART, en SA_SIGINFO toe.  Het
       gebruik van de laatste waarden in sa_flagsis 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).

       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.

   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.

   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.

       In  kernels  tot  en  met  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 kernel 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 <stdlib.h>
       #include <stdio.h>
       #include <unistd.h>

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

           if (sigaction(SIGSEGV, NULL, &oudeact) == -1 ||
                   (oudeact.sa_flags & SA_UNSUPPORTED) ||
                   !(oudeact.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)

COLOFON

       Deze   pagina  is  onderdeel  van  release  5.13  van  het  Linux  man-pages-project.  Een
       beschrijving van het project, informatie over het melden van bugs en  de  nieuwste  versie
       van deze pagina zijn op https://www.kernel.org/doc/man-pages/ te vinden.

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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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⟩.