Проблема.
Есть небольшая программа, принимающия по UDP пакет с даннымы, обрабатывающая их и отсылающая ответ на news сервер.
Программа стартует из под xinetd:
service programm { socket_type = dgram protocol = udp wait = no user = root server = /usr/local/prog/client disable = no port = 22222 }
сама программа выглялит так (конечно, исходная программа больше, но нижеприведенная ведет себя аналогично):
#!/usr/local/bin/perl -w
use News::NNTPClient; use Socket;
my $buff; my @terms; my $news_server_addr="localhost"; my $news_server_port=119;
$server_acc = "1.2.3.4";
my $addr=recv(STDIN,$buff,1536,0); my($port,$IP) = sockaddr_in($addr); #приняли send STDIN, "", 0, sockaddr_in($port,inet_aton($server_acc)); #подтвердили прием
if ( defined ($buff)) { @terms=split (",",$buff); @body = ($terms[1],$terms[2]); @header = ("Newsgroups: test.test", "Subject: test1" , "From: tester"); #обработали данные $c = new News::NNTPClient($news_server_addr, $news_server_port); $c->post(@header, "", @body); #отослали на Nntp }
При приеме пакета на UDP 22222, xinetd пораждает иногда до 10 процессов (а иногда всего 1). Естветственно, один из них обрабатывает пакет, а остальные остаются висеть в памяти.
Почему это происходит и как избавится от кучи левых пораждаемых процессов?