Prozesserzeugung, Kindprozesse und deren Management...
-
Hallo,
Ich möchte/muss ein Programm schreiben, dass zwei Kindprozesse erzeugt und schließlich den jüngeren Kindprozess den älteren "killen" lassen. Bisher habe ich beide Prozesse erstellt, lasse den Elternprozess auf den exit des jüngeren Kindprozesses warten und auch sonst scheint das meiste bereits recht gut zu funktionieren. Das einzige, das scheinbar noch nicht wirklich funktioniert, ist das "killen" des älteren Kindprozesses.
Ich habe bereits diverse Lösungsversuche hinter mir und habe das Gefühl mich im Moment nur noch weiter zu verrennen, deshalb hoffe ich, dass mir hier jemand auf den richtigen Weg helfen kann. Da ich mich erst seit kurzem mit Prozessen etc beschäftige, mag es auch sein, dass ich irgendwie einen Denkfehler bei der ganzen Geschichte habe...
#include <sys/wait.h> #include <sys/time.h> #include <sys/resource.h> #include <signal.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main () { int s, k, status; pid_t chPID, ch1PID, ch2PID, ch3PID; ch1PID=fork(); if(ch1PID==-1){ printf("Fehler beim fork!\n"); return 1; } if(ch1PID==0){ ch3PID=getpid(); printf("Ich bin Kindprozess 1: %d!\n", ch3PID); while(1){s++;} } else{ chPID=fork(); if(chPID==-1){ printf("Fehler beim fork!\n"); return 1; } if(chPID==0){ ch2PID=getpid(); printf("Ich bin Kindprozess 2: %d!\n", ch2PID); k=kill(ch3PID, 9); if(k=0) printf("Kind 2 hat Kind 1 getötet!\n"); exit(1); } else{ waitpid(chPID, &status, WIFEXITED(status)); if(WIFEXITED(status)){ printf("Kind 2 wurde beendet\n"); } } } return 0; }
Würde mich über Hilfe, Tipps und Denkanstöße sehr freuen und möchte mich schonmal im Vorfeld bedanken!
LG,
Roboneko
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Klar. We soll das auch gehen.
Prozess alt setzt:
ch3PID=getpid();
Prozess neu killt:
k=kill(ch3PID, 9);
AFAIK ist der Inhalt der Variablen ch3PID aus Prozess alt in Prozess neu nicht bekannt. Ich glaube es ist Standard, dass die Variablen beim Forken noch nicht neu angelegt werden, aber beim neu beschreiben(was du ja in "alt" machst). Das nennt sich glaube "Copy on Write".
Schreibs mal so:
... if(ch1PID==0){// wenn ch1PID 0, dann befinden wir uns im Kind printf("Ich bin Kindprozess 1: %d!\n", ch3PID); while(1){s++;} } else{ // wenn ch1PID > 0, dann ist dies die PID des Kindes, die dem Elternprozess bekannt gemacht wird chPID=fork(); if(chPID==-1){ printf("Fehler beim fork!\n"); return 1; } if(chPID==0){ ch2PID=getpid(); printf("Ich bin Kindprozess 2: %d!\n", ch2PID); k=kill(ch1PID, 9); // hier ch1PID killen, wert wurde von Elternprozess in Kind übertragen if(k=0) printf("Kind 2 hat Kind 1 getötet!\n"); exit(1); } else{ waitpid(chPID, &status, WIFEXITED(status)); if(WIFEXITED(status)){ printf("Kind 2 wurde beendet\n"); } } }