[perl] Почему код (remote shell) жрёт пятьдесят процентов CPU?

evgen5555

Почему следующий код (remote shell ) жрёт пятьдесят процентов CPU?

#!/usr/bin/perl
use Socket;
&daemon1ze;
my $port = shift || 8005;
my $proto = getprotobyname('tcp');
socket(SERVER, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
$SIG{INT} = 'IGNORE';
setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1) or die "setsock: $!";
my $paddr = sockaddr_in($port, INADDR_ANY);
bind(SERVER, $paddr) or die "bind: $!";
listen(SERVER, 1) or die "listen: $!";
my $client_addr;
while ($client_addr = accept(MINET, SERVER
{
while(1)
{
my $line = <MINET>;
select(MINET);
$|=1;
print MINET `$line`;
}
close MINET;
}
sub daemon1ze
{
chdir '/' or die "$!";
open STDIN, '/dev/null' or die "$!";
open STDOUT, '>>/dev/null' or die "$!";
open STDERR, '>>/dev/null' or die "$!";
defined(my $pid = fork) or die "$!";
exit if $pid;
setsid or die "n: $!";
umask 0;
}


eduard615


while(my $line = <MINET>)
{
select(MINET);
$|=1;
print MINET `$line`;
}

а вообще есть маза почитать perldoc perlipc

evgen5555

маза почитать perldoc perlipc

Какая-то голимая маза

Barbie29

а ты не зазнавался бы и прочитал, там как раз есть работающий пример шелла.

ava3443

а профилированием не пробовал заниматься?

evgen5555

У меня инструментарий весьма ограниченный для этого дела.

evgen5555

Я не зазнаюсь, просто мне нужно было выяснить причину конкретной проблемы. Понимание философии Perl IPC в мои планы пока не входит.
Оставить комментарий
Имя или ник:
Комментарий: