fork uind wait() Problem
Disaster
- perl
Hallo!
Ich arbeite zur Zeit an einem Programm (Server), dass auf Socket Verbindungen von einem Client wartet und sobald eine Verbindung eintrifft spaltet es sich mittels fork ab und abreitet mit dem Client. Der Parent Prozess wartet dann währen dieser Zeit wieder auf einen neue Connection usw. usw.
Das Problem ist, dass nach einigen Tagen Laufzeit auf einmal 4-5 Prozesse vorhanden sind, obwohl kein einziger Client mehr connected ist. Ich habe das Gefühl, das manche Kinder nicht mehr beendet werden.
Momentan benutze ich:
$SIG{CHLD} = sub { wait() };
Würde mich freuen, wenn jemand Rat weiß...
Disaster
ReHallo!
Ich arbeite zur Zeit an einem Programm (Server), dass auf Socket Verbindungen von einem Client wartet und sobald eine Verbindung eintrifft spaltet es sich mittels fork ab und abreitet mit dem Client. Der Parent Prozess wartet dann währen dieser Zeit wieder auf einen neue Connection usw. usw.
Das Problem ist, dass nach einigen Tagen Laufzeit auf einmal 4-5 Prozesse vorhanden sind, obwohl kein einziger Client mehr connected ist. Ich habe das Gefühl, das manche Kinder nicht mehr beendet werden.
Wieviel war denn in den "einigen" Tagen los? Wieviel Kinder mußten so gebildet werden? Wieviele waren es so gleichzeitig? So ungefähr, damit man weiß, wie relativ die 4-5 Prozesse sind.
Momentan benutze ich:
$SIG{CHLD} = sub { wait() };
Für ein solches Problem - finde ich - lieferst Du ganz schön wenig Code. Damit dürfte es schwierig sein, etwas nachzuvollziehen.
Vielleicht solltest Du noch mal exakt prüfen, wann das Kind beendet wird und ob es Fälle geben kann - und seien sie noch so theoretisch - in denen das Kind nicht macht was es soll (sich nicht beendet).
Ein Ansatz vielleicht: Was passiert, wenn der Client plötzlich nicht mehr da ist (abgeschmiert), was macht dann Dein Child-Process? Wird das richtig festgestellt? Immer? Egal, ob die Connection unmittelbar vor dem Abschmieren ruhte oder Daten vielleicht gerade gesendet wurden oder empfangen wurden?
Würde mich freuen, wenn jemand Rat weiß...
Disaster