Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2009-07-14 18:56:56

  szpuni - Użytkownik

szpuni
Użytkownik
Zarejestrowany: 2009-07-03

Perl fork() i powstajace zombie

Witam,

Mam tutaj skrypt dzialajacy w trybie serwer klient:

Kod:

my $pid = fork();
    if (!$pid) { # this is child process
        print "Listening...\n";
        while (<$sock>) {
                   jakies_tam_funkcje();
        }
        logprint "Child caught disconnect\n";
        system("touch disconnect.dis");
        exit;
    }

Chodzi o to ze jezeli klient rozlaczy sie z serwerem to zostaja procesy zombie.
Wiec przerobilem to tak:

Kod:

    my $pid = fork();
    if ($pid) {
        waitpid($pid ,-1);
    }
    elsif ($pid == 0) { # this is child process
                      print "Listening...\n";
        while (<$sock>) {
                          jakis_tam_kod();
                }
           logprint "Child caught disconnect\n";
        system("touch disconnect.dis");
        exit(0);   
    }

 else {
                die "couldn`t fork: $!\n";
        }

Ale niestety nie pomoglo to w nietworzeniu zombie.

Wiem ze musze uzyc waitpid albo wait.
Tylko ze nie wiem dokladnie gdzie.

Domyslam sie ze powinno to wyladowac po

Kod:

elsif ($pid == 0) {
waitpid($pid, ?)

i reszta kodu
}

Nie wiem czy mysle dobrze i co powinienem wstawic czy wartosc -1 czy moze 0 albo 1.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)