ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
2070
2070
EMPFEHLEN
-
Hallo,
ich möchte 1 Vaterprozess erzeugen, der wiederum 2 Sohnprozesse startet:
dieser Code:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
pid = fork(); if (pid < 0) { printf("Fehlermeldung: %s bei fork. \n" , strerror(errno)); } else if (pid == 0) { printf("Sohn1: %d \n" , getpid()); } else { printf("Vater: %d: arbeitet weiter... und wartet nicht auf Sohn1: %d\n\n", getpid() , pid); } pid = fork(); if (pid < 0) { printf("Fehlermeldung: %s bei fork. \n" , strerror(errno)); } else if (pid == 0) { printf("Sohn1: %d \n" , getpid()); } else { printf("Vater: %d: arbeitet weiter... und wartet nicht auf Sohn2: %d\n\n", getpid() , pid); }
gibt diese Ausgabe:
http://image-upload.biz/files/8c9d91...3ad0859bc1.png
Ich dachte ich erzeuge hier 2 Sohnprozesse doch sehe ich jede Menge Söhne und Väter... ?
Auch würde ich die Prozesse unter Ubuntu gerne kontrollieren können sprich wer wann startet und beendet wurde etc. Unter der Systemüberwachung sehe ich zwar Prozesse, doch nicht die Prozesse , die von mir erzeugt wurden?
-
Hi
wenn du den Sohn1 erzeugt hast, dann hast du zwar ne If-Anweisung um zuerkennen, ob das Sohn oder der Vater ausführt, aber der Sohn führt ja auch die 2. fork Anweisung aus.
lg
-
-
Doch, denn der Sohn führt ja den Code NACH der Else-Anweisung auch aus.
Also nach Zeile 13 lebt der Sohn ja weiter.
-
-
is doch einfach, du musst einfach die 2. fork anweisung incl. dem IF-Block in dem if-Zweig beim ersten fork für der Vater verschieben (also nach Zeile 12)
lg
-
-
ok
hab ma deinen Code umgeschrieben
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
pid = fork(); if (pid < 0) { printf("Fehlermeldung: %s bei fork. \n" , strerror(errno)); } else if (pid == 0) { printf("Sohn1: %d \n" , getpid()); } else { printf("Vater: %d: arbeitet weiter... und wartet nicht auf Sohn1: %d\n\n", getpid() , pid); // Vater erstellt 2. Sohn pid = fork(); if (pid < 0) { printf("Fehlermeldung: %s bei fork. \n" , strerror(errno)); } else if (pid == 0) { printf("Sohn2: %d \n" , getpid()); } else { printf("Vater: %d: arbeitet weiter... und wartet nicht auf Sohn2: %d\n\n", getpid() , pid); } } // ab hier wird der Code von den beiden Söhnen + Vater ausgeführt
lg
PS: meine Grammatik war auch schon mal besser
-
was ich letztendlich habe möchte sind 10 parallele Prozesse und ich habe keinen blassen Schimmer wie ich das realisieren kann, daher andere Frage, wenn der Vaterprozess mit wait() auf den exit-status des Sohnprozesses wartet, der Sohn in seinem if-zweig aber kein exit(0) hat stirbt der Sohn ja nicht sprich er bleibt als voller Sohnprozess im Speicher oder ?
Ergebnis: Nein, der Sohn fliegt aus dem Speicher raus als Prozess, doch warum? Antwort: weil der if-Zweig verlassen wird ? ist das so?
warum lese ich im Internet immer wieder exit(0) , exist(10) usw... was immer das gleiche machen soll? Hat mir jemand bitte eine vollständige Parameterliste für die Funktion exit() ?
der parameter -1 geht nicht dann mache ich -l (ein "L") doch ich bekomme nicht die anzahl der Zombies mit obiger sprintf-Ausgabe? Weiß jemand woran das liegt?Code :1
sprintf(kdo,"ps -ef |grep %s |grep defunct |grep -v gep | wc -1" , argv[0]);
Warum wird das printf des VAterprozesses nie ausgegeben, wenn doch der Vaterprozess parallel zum Sohnprozess läuft, dürfte der Vater die endlosschleife des Sohnes doch gar nicht beachten?
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
#include <sys/types.h> #include <errno.h> main(int argc , int **argv) { pid_t pid; char kdo[50]; int status; sprintf(kdo,"ps -ef |grep %s |grep defunct |grep -v gep | wc" , argv[0]); pid = fork(); /*------------------------------------------------ Fehler bei Prozess erzeugen ------------------------------- */ if(pid < 0) { printf("Fehlermeldung %s bei fork. \n", strerror(errno)); exit(-1); } /*------------------------------------------------- Sohn Prozess ---------------------------------------------- */ if (pid == 0) { while(1) { printf("Sohn (%d) kann jetzt ewig arbeiten, da er in einer Schleife läuft! mit 3 sekunden Pause. \n" , getpid()); sleep(3); } } /*-------------------------------------------------- Vater Prozess --------------------------------------------- */ if(pid > 0) { pid = wait(&status); printf("Vater (%d) warte auf Sohn (%d) \n", getpid() , pid); while(1) { printf("Vater (%d): Anzahl an Zombies(toten Kindern): \n", getpid()); system(kdo); sleep(5); // 5 sekunden warten printf("Vater (%d) arbeitet... (Abbruch mit STRG+C) \n" , getpid()); } } }Geändert von will2k (28.04.08 um 13:17 Uhr)
Ähnliche Themen
-
Welches Modem für meinen Vater?
Von Alexander Groß im Forum Internet, DSL & FlatrateAntworten: 6Letzter Beitrag: 13.05.10, 23:31 -
Wenn einem Vater die Kamera abnimmt..
Von FrankyFlowers im Forum FotografieAntworten: 2Letzter Beitrag: 07.07.07, 01:34 -
Ausgabe von Bäumen mit Vater-Zeiger
Von qsrs im Forum PHPAntworten: 8Letzter Beitrag: 15.12.06, 15:18 -
ISDN Einwahl über Fitzcard zu Computer von meinem Vater
Von 16V-Schrauber im Forum NetzwerkeAntworten: 7Letzter Beitrag: 22.09.06, 11:29 -
Wer ist Anakin Skywalkers Vater?
Von revenge86 im Forum SmalltalkAntworten: 7Letzter Beitrag: 18.11.05, 09:52





Zitieren

Login






