Hallo, was ich hier zu tun versuche, ist ein Programm, das beginnt, indem es seine PID in der Datei server.lock registieren, dann sollte es ein fork() tun. Der Sohn sollte sagen, dass es anfing zu arbeiten, als passiv zu warten und das Signal SIGUSR2 zu bewaffnen, und wenn es es empfängt, sollte es seine Ausführung beenden und "Auf Wiedersehen grausame Welt" schreiben. Der Elternteil sollte schreiben, es begann und passiv warten und dann die Signale SIGUSR1 und SIGINT scharf schalten. Wenn es SIGUSR1 empfängt, sollte es selbst das Signal SIGUSR2 an den Sohn senden, und wenn es das Signal SIGINT empfängt, wenn es es das erste Mal empfängt, sollte es sagen, dass es das Signal erhalten hat, wenn es das zweite Mal das Signal SIGUSR2 senden soll der Sohn, damit endet der Sohn und es ist die Hinrichtung. Jetzt ist mein Problem mit dem Elternteil, ich weiß nicht warum, aber beim zweiten Mal erhält es das Signal es heißt den Fehler "User defined signal 2" und geht, wenn mir jemand erklären könnte was ich hier falsch mache würde ich sehr zu schätzen wissen. Hier ist der Code. Vielen Dank.Programm mit fork() und Signalverarbeitung in c
int p = 1;
int son;
void handle_SIGINT(int signal){
if (p==1) {
p = 2;
printf("The authentication module received the signal SIGINT\n");
}else{
kill(son, SIGUSR2);
exit(0);
}
}
void handle_SIGUSR1(int signal){
kill(son, SIGUSR2);
}
void handle_SIGUSR2(int signal){
printf("Goodbye cruel world\n");
exit(0);
}
void main(){
int pid = getpid();
FILE *f = fopen("server.lock", "w");
fprintf(f, "%d", pid);
fclose(f);
int n = fork();
if (n==0) {
printf("The message handling module has started\n");
signal(SIGUSR2, handle_SIGUSR2);
while(1)
pause();
}else{
printf("The authentication module has started\n");
son = getpid();
signal(SIGUSR1, handle_SIGUSR1);
signal(SIGINT, handle_SIGINT);
while(1)
pause();
}
}
IIRC der Signal-Handler ist nicht gesetzt, wenn er aufgerufen wird, was bedeutet, dass er sich selbst neu setzen muss. – immibis
Es tut mir leid, aber sind nicht alle 3 Signal-Handler vor dem Haupt definiert werden? Ich meine zum ersten Mal (für das Signal SIGINT) funktioniert das Elternteil einwandfrei, das Problem ist das zweite Mal. – GamerGirl
Mögliches Duplikat von [Was ist der Unterschied zwischen Signal und Signal?] (Http://stackoverflow.com/questions/231912/what-is-the-difference-between-sigaction-and-signal) –