In C ändern, möchte ich die SIGINT
Signal fangen und ausdrucken eine Meldung wie „SIGINT erhalten“ unter Verwendung sigaction und Übergabe eines neuen Handler, um es überKann nicht Standardaktion für SIGINT
sa.sa_sigaction = handler;
I don Ich möchte das Programm nicht beenden.
Wenn ich mein Programm durch die Shell laufen lasse und das Signal mit Strg + C erzeuge, fängt der Signalhandler das Signal ab und druckt meine Nachricht aus.
Anschließend wird die Standardaktion durchgeführt, die den Prozess beendet.
Was mache ich falsch?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <string.h>
#include <signal.h>
static void handler(int sig, siginfo_t* si, void *unused){
if(sig == SIGINT){
printf("Signal %i received\n",si->si_signo);
}
}
int main(int argc, char* argv[]){
char s [256];
struct sigaction sa;
sigemptyset(&sa.sa_mask);
sigaddset(&sa.sa_mask, SIGINT);
sa.sa_flags = SA_SIGINFO;
sa.sa_sigaction = handler;
if(sigaction(SIGINT, &sa, NULL) < 0){
perror("sigaction");
}
fgets(s,sizeof(s), stdin);
printf("%s", s);
return 0;
}
Was machst du nach der sigaction und vor der Rückkehr von der Hauptleitung? – rici
Ich habe den Code aktualisiert. Ich wiederhole einfach die Benutzereingabe. –
Woher weißt du, dass das Sigint dein Programm beendet? Ich denke, es endet gerade, weil Fgets zurückkommt. – rici