Prozesse
-
Zu schreiben ist ein Programm das eine Kommunikation zwischen 2 Prozessen ermoeglicht. Der Vater soll alle 2 Sekunden dem Sohn eine alive-Nachricht schicken und Umgekehrt. Der Benutzer ist in der Lage durch SIGUSR1 und SIGUSR2 die Prozesse zu beenden. Sobald ein Prozess gekillt wurde, begeht der andere "Selbstmord".
Bis jetzt hab ich sowas hier geschrieben nur klappt das nicht so richtig, hat vlt wer ne Idee wo der Fehler liegt?#include <stdio.h> #include <signal.h> #include <unistd.h> #include <stdlib.h> #include <string.h> const char *killFather = "1"; const char *killSon = "2"; char *valid1 = "1"; char user[20]; int fd1[2]; int fd2[2]; int pid; void alarm_handler(int sig) { signal(SIGALRM, alarm_handler); alarm(2); if (pid == 0) { if (strcmp(user, killSon) == 0) { printf("killed Son"); valid1 = "0"; exit(1); } write(fd1[1], valid1, sizeof(valid1)); read(fd2[0], valid1, sizeof(valid1)); if (strcmp(valid1, "0") == 0) { //Father died printf("Child commits suicide"); exit(1); } else { printf("Father's still alive\n"); } } else { if (strcmp(user, killFather) == 0) { printf("killed Father"); valid1 = "0"; exit(1); } write(fd2[1], valid1, strlen(valid1)); read(fd1[0], valid1, strlen(valid1)); if (strcmp(valid1, "0") == 0) { printf("Father commits suicide"); exit(1); } else { printf("Child's still alive\n"); } } } void begin() { pipe(fd1); pipe(fd2); pid = fork(); signal(SIGALRM, alarm_handler); alarm(2); } int main() { begin(); while(1) { scanf("%s", user); } return 0; }
-
bevor wir uns den ganzen Code durchlesen, was läuft denn schief?
-
Also zunaechst beendet er nicht immer nach der Eingabe von "1" oder "2" (kill Father/Son) den gewuenschten Prozess, und falls doch laeuft der andere jedoch weiter ohne auch beendet zu werden...