prozesserzeugung mittels fork
-
Hallo!
Ich habe hier 3 fragen zum arbeiten mit prozessen:
1.Wie schaffe ich es, dass ein prozess 6 kindprozesse erzeugt, die kindprozesse selbst aber keine neuen kindprozesse erzeugen?
2.Kann ich nur mittels sleep einen prozess eine bestimmte zeit lang pausieren lassen, oder geht das sonst noch irgendwie?
3.Wie kann ich feststellen ob ein prozess kurz vor dem terminieren ist, um dann eine entsprechende meldung auszugeben?
lieben dank
Martin
-
Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI C 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.
-
1. 6 mal in dem Prozess forken
2. man: usleep, man: nanosleep oder einfach auf Eingabe warten
3. man: atexit
-
danke schon mal
aber ist es nicht so, dass wenn ich 6 mal forke auch die kindprozesse zu elternprozessen werden und kindprozesse erzeugen?
-
Martin_82 schrieb:
danke schon mal
aber ist es nicht so, dass wenn ich 6 mal forke auch die kindprozesse zu elternprozessen werden und kindprozesse erzeugen?
Dann fork halt immer nur im Elternprozess. Das kannst du am Rückgabewert von fork() erkennen.
-
das hab ich schon probiert, aber ich krieg dann trotzdem mehr als 6 prozesse raus.. und wenns mal genau 6 sind, dann haben die die identische pid und ppid
-
Du musst halt dafür sorgen, dass die Kindprozesse nicht forken.
if(fork() == 0) { child_funktion(); exit(1); }
(ist ja eigentlich keine Genieleistung
)
-
danke, mir hat das exit gefehlt...
-
Was genau macht dieses exit(-1)?
-
rüdiger schrieb:
Du musst halt dafür sorgen, dass die Kindprozesse nicht forken.
if(fork() == 0) { child_funktion(); exit(1); }
ich würde es so nicht machen, weil fork auch -1 liefern kann und der Vaterprozess sollte sich die PID vom Kindprozess merken.
Armin01 schrieb:
Was genau macht dieses exit(-1)?
dasselbe wie exit(33) oder exit(1) oder exit(44). Der Prozess wird beendet und der Rückgabewert des Prozess ist im Falle von exit(-1) -1.