C Programmbausteine ​​Signale aber nur Liefert One

stimmen
0

Ich bin nicht sehr vertraut mit den Signalfunktionen und ich versuche alles Sinn zu machen. Der folgende Code soll alle SIGINTs für die ersten 10 Sekunden, um blockieren, und dann alle Signale verarbeiten, nachdem es unblockiert wird (10 sec. Punkt). Das Problem, das ich habe, ist, dass nur ein Signal unabhängig von geliefert wird, wie oft ich nenne ctrl + c. Was könnte sein ich falsch gemacht?

#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <time.h>
#include <signal.h>
#include <string.h>


void kill_handler(int signo)
{
    write(1, Hello\n, 6);
}

void alarm_handler(int signo)
{
    char str3[] = The 20 Seconds is over finished\n;
    write(1, str3, strlen(str3));
    exit(0);
}

int main(void) {
    //install alarm handler
    printf(The pid is: %i\n, getpid());
    sigset_t mask;
    sigset_t first_mask;
    struct sigaction saAlarm;
    struct sigaction newSa;
    struct sigaction saInt;
    memset(&newSa, 0, sizeof(newSa));
    memset(&saInt, 0, sizeof(saInt));
    memset(&saAlarm, 0, sizeof(saAlarm));
    // install alarm handler
    saAlarm.sa_flags = 0;
    saAlarm.sa_handler = alarm_handler;
    sigaction(SIGALRM, &saAlarm, NULL);
    // install ctrl c handler
    saInt.sa_flags = 0;
    saInt.sa_handler = kill_handler;
    sigaction(SIGINT, &saInt, NULL);
    //ignore sa
    newSa.sa_handler = SIG_IGN;
    newSa.sa_flags = 0;
    //enter block state
    sigemptyset(&mask);
    sigaddset(&mask, SIGINT);

    sigprocmask(SIG_BLOCK, &mask, &first_mask);
    alarm(20);
    sleep(10);
    //exit block state
    sigprocmask(SIG_SETMASK, &first_mask, NULL);
    //ignore sigint
    sigaction(SIGINT, &newSa, &saInt);
    //infinite loop
    while(1){}

    return 0;
}
Veröffentlicht am 09/10/2019 um 18:55
quelle vom benutzer
In anderen Sprachen...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more