Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zabijanie procesów zombie TCP Windows

Ostatnio zmodyfikowano 2013-06-16 16:06
Autor Wiadomość
MordiJC
Temat założony przez niniejszego użytkownika
Zabijanie procesów zombie TCP Windows
» 2013-06-16 12:23:39
W kursie WINSOCK2 znalazłem takie coś:
C/C++
void sigchld_handler( int s )
{
    while( wait( NULL ) > 0 );
   
}
Wymagany jest do tego nagłówek sys/wait.h, którego w windowsie nie znajdę.
Czy jest jakiś zamiennik za tę funkcję pod windowsem? I czy w ogóle na windowsie (i linux'ie) jest to potrzebne?

P.S.
Znalazłem w internecie coś takiego:
signal(SIGCHLD, SIG_IGN);
Podobno wysyła to informację do systemu, aby zabijał on pozostawione przez nas Zombie Procesy.
Nie wiem, czy to działa.
P-85670
DejaVu
» 2013-06-16 13:27:51
Kod, który wkleiłeś nie ma najmniejszego sensu - z jakiego kursu to wziąłeś?

/edit:
A co do procesów 'Zombie' - wydaje mi się, że prędzej może Ci chodzić o wątek w aplikacji aniżeli proces, który przekłada się de-facto na całą aplikację. Jeżeli aplikacja się nie zamyka z powodu komunikacji sieciowej to znaczy, że jest niepoprawnie napisana i należy naprawiać kod źródłowy, a nie szukać obejścia problemu.
P-85678
MordiJC
Temat założony przez niniejszego użytkownika
» 2013-06-16 14:05:10
Ten kod wziąłem z Tło klient-serwer w kursie WinSOCK na tej stronie. Funkcja fork() tworzy kopię frocesu macieżystego i po zakończeniu działania zostawia "zwłoki", które trzeba usunąć. (z tego, co zrozumiałem)
P-85680
DejaVu
» 2013-06-16 14:43:25
http://cpp0x.pl/kursy/Kurs-WinSock-C++/Tlo-Klient-Serwer/276

Fakt, znalazłem kod w którym jest napisane to, o czym wspomniałeś. Kurs był pisany pod Linuksa, ale pod Windowsa również ma zastosowanie. W pierwszym/drugim rozdziale jest napisane, że funkcje pod Windowsem i Linuksem są takie same do komunikacji sieciowej i główną różnicą są pliki nagłówkowe, jakie należy dołączać. Kod z którego wyciągasz fragmenty jest napisany stricte pod Linuksa i go nie przeniesiesz na Windowsa, ponieważ fork (o ile mnie pamięć nie zawodzi) jest typowo linuksowym rozwiązaniem i nie ma go pod Windowsem.

/edit:
Dodam jeszcze, że metoda ze wspomnianego rozdziału jest beznadziejna do obsługi wielu klientów (jeden proces na obsługę jednego klienta), więc radzę zapoznać się z kolejnym rozdziałem :)
P-85683
MordiJC
Temat założony przez niniejszego użytkownika
» 2013-06-16 14:53:55
Wielkie dzięki. Do profesjonalisty trochę mi jeszcze brakuje, ale szybko się uczę (a przy najmniej mi się tak wydaje).
P-85685
Elaine
» 2013-06-16 16:06:06
fork (o ile mnie pamięć nie zawodzi) jest typowo linuksowym rozwiązaniem
POSIXowym. Istniał już w Uniksie w latach siedemdziesiątych, obecnie istnieje na wszystkich liczących się serwerowych i desktopowych systemach poza Windowsem… ale nawet tam jądro wspiera tą funkcjonalność, problemem jest tylko to, że nikt nie wie, jak poinformować podsystem Win32 o nowym procesie — dlatego wynalazki w rodzaju Cygwina wolą emulować fork w trybie użytkownika.
P-85693
« 1 »
  Strona 1 z 1