Mit sigaction(), c

War ich dabei ein wenig Lesen über sigaction() (Quellen sind aus meinem Kurs Notizen) und ich bin mir nicht sicher, ob ich verstehe diesen text:

Den signal-Maske berechnet und installiert werden, nur für die Dauer der
der signal-handler.

Standardmäßig das signal "sig" ist auch blockiert, wenn das signal Auftritt.

Einmal eine Aktion installiert ist, ein spezifisches signal mit sigaction,
es installiert bleiben, bis eine andere Aktion ist ausdrücklich erwünscht.

Bedeutet dies, dass die Standard-signal-Maske wird wiederhergestellt, nach der Rückkehr der form der signal-handler?
Auch, muss ich re-installieren Sie den handler, nachdem Sie es, als wenn ich mit signal()?

Außerdem gibt es dieses Stück code:

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

void termination_handler(int signum) {
    exit(7);
}

int main (void) {
  struct sigaction new_action,old_action;
  new_action.sa_handler = termination_handler;
  sigemptyset(&new_action.sa_mask);
  sigaddset(&new_action.sa_mask, SIGTERM);
  new_action.sa_flags = 0;
  sigaction(SIGINT, NULL, &old_action);
  if (old_action.sa_handler != SIG_IGN) {
         sigaction(SIGINT,&new_action,NULL);
  }
  sleep(10);
  return 0;
}

Also - wie genau wird SIGTERM behandelt werden? Ich kann sehen, dass die installierte handler ist termination handler(), aber dann SIGTERM wurde Hinzugefügt, um die signal-Maske ohne Verwendung von sigprocmask(). Was bedeutet das? Danke!

P. s. eine Letzte Frage: warum die if Anweisung in main()?

  • Haben Sie jemals eigene signal-handler ? Wenn nicht, Mein Rat ist, verwenden Sie zuerst Ihre eigene signal-handler. Dann, sigaction einfach zu verstehen. If-Anweisung ist-Vergleich ( check gefangen signal erwartet wird eine ). Und, Antwort für die erste Frage liegt auf ` die Dauer des signal-handler`.
InformationsquelleAutor yotamoo | 2012-07-13
Schreibe einen Kommentar