Fork i dziwne zombie

0

Pisze program pod Linux i spotkal mnie dziwny blad :/ A mianowicie mam sobie program ktory odbiera informacie od inncyh proramow przez blizej nieokreslone medium. Jak odbierze pakiet to robi fork i tworzy dziecko ktore obsluguje te zapytanie. Dziecko po zakonczeniu obslugi wywoluje exit z jakism kodem.

Ale jak wyswietle liste procesow to dzieci ktore powinny nie dzialac juz sa oznaczone jako zombie :/ Tyle ze wydalem exit na dziecku wiec w ogóle go nie powinno byc? Za kazdym pakietem powstaje jedno zombie :( Dlaczego sie tak dzieje?

0

ZOMBIE to jest proces ktory sie zakonczyl, ale od ktorego NIE ODEBRANO kodu zakonczenia.. poczytaj o forkowaniu, rodzicach, dzieciach, cyklu zycia i o czekaniu na zakonczenie pod-procesu

0

Wiem jak to dziala :) i wiem ze musze wait uzyc ale ja niechce bo serwer ma sobie dzialac dalej :/ jak to ominac?

0

Wystarczy ignorować sygnał SIGCHLD.

Na początku programu głównego wpisz:

#include <signal.h>
(...)
signal(SIGCHLD, SIG_IGN);

Ale uwaga:

Zgodnie ze standardem POSIX (3.3.1.3) nie jest określone, co sie stanie gdy SIGCHLD zostanie ustawiony na SIG_IGN. W tym miejscu zachowanie BSD i SYSV różni się, powodując nie działanie na Linuksie oprogramowania BSD, które ustawia akcję dla SIGCHLD na SIG_IGN.

W każdym razie mam linuksa i mi to działa-zombie się nie pojawiają.

0
JaNieWiem napisał(a)

Wiem jak to dziala :) i wiem ze musze wait uzyc ale ja niechce bo serwer ma sobie dzialac dalej :/ jak to ominac?

z zombie trzeba sobie jakos radzic, poniewaz poki sie ich nie zbierze to smieca i zajmuja pamiec.. jedyna rada to uzywac wait(pid), wait(0) albo uzywac procesow oderwanych (DETACHED) ktore odlaczaja sie od rodzica calkowicie i nie pozostawiaja oczekujacego zombie po swoim zakonczeniu. tak wiec - albo przerzuc sie na child-detached, albo w procesie rodzica/serwera utworz jeden maly watek ktory bedzie wykonywacc cos w stylu:

while(!server_shutdown)
   wait(0);

1 użytkowników online, w tym zalogowanych: 0, gości: 1