Recevoir des messages d’erreur SIGALRM SIGSTP non déclarés, bien que j’aie inclus

Je pratique avec des signaux. Lors de la compilation du code, j’ai reçu des messages d’erreur SIGALRM et SIGSTP non déclarés.

main.c: 46: 16: erreur: signal ‘SIGALARM’ non déclaré (première utilisation dans cette fonction) (SIGALARM, (void (*) (int)) sig_alarm);

main.c: 68: 16: erreur: signal “SIGSTP” non déclaré (première utilisation dans cette fonction) (SIGSTP, (void (*) (int)) int_handler);

#include  #include  #include  #include  #include  void sig_alarm(int sig){ kill(sig,SIGKILL); } void parent1(int sig){ kill(sig, SIGUSR1); } void parent2(int sig){ if(sig == 0){/*child is running*/ kill(sig, SIGUSR2); }else if(sig > 0){/*parent is running*/ printf("Goodbye!"); exit(0); } } void int_handler(int sig){} void child1(int sig){ printf("Signal received!"); } void child2(int sig){ printf("Child exiting..."); exit(0); } int main(){ pid_t pid; if((pid = fork())  0){/*parent*/ signal(SIGALARM, (void (*)(int))sig_alarm); alarm(10); signal(SIGTSTP, (void (*)(int))parent1); while(1){ pause(); } alarm(0); signal(SIGALARM, (void (*)(int))sig_alarm); alarm(10); signal(SIGINT, (void (*)(int))parent2); while(1){ pause(); } alarm(0); }else{/*child*/ signal(SIGINT, (void (*)(int))int_handler); signal(SIGSTP, (void (*)(int))int_handler); signal(SIGUSR1, (void (*)(int))child1); while(1){ pause(); } signal(SIGUSR2, (void (*)(int))child2); while(1){ pause(); } } return 0; } 

Lisez la page de manuel signal (7) pour obtenir les noms de signaux valides.

Les noms corrects sont SIGTSTP (ou SIGSTOP – vous ne SIGTSTP pas quelle est votre intention exacte) et SIGALRM .

Notez que SIGSTOP ne peut pas être attrapé.