Проблема.
Есть небольшая программа, принимающия по 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). Естветственно, один из них обрабатывает
пакет, а остальные остаются висеть в памяти.
Почему это происходит и как избавится от кучи левых пораждаемых процессов?