Zabijanie procesów zombie TCP Windows
Ostatnio zmodyfikowano 2013-06-16 16:06
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ś: 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. |
|
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. |
|
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) |
|
DejaVu |
» 2013-06-16 14:43:25 http://cpp0x.pl/kursy/Kurs-WinSock-C++/Tlo-Klient-Serwer/276Fakt, 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 :) |
|
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). |
|
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. |
|
« 1 » |