我尝试使用Perl创建TCP服务器。我能够成功创建TCP服务器以满足客户端请求。但由于儿童进程已经解散,我面临一个问题。完成执行后,所有子进程都将失效。我无法解决这个问题。
my $server = IO::Socket::INET->new
(
LocalAddr => 'localhost',
LocalPort => 48005,
Type => SOCK_STREAM,
Reuse => 1,
Listen => 5
) or die "could not open port\n";
warn "server ready waiting for connections..... \n";
my $client;
while ($client = $server->accept())
{
my $pid;
while (not defined ($pid = fork()))
{
sleep 5;
}
if ($pid)
{
close $client;
}
else
{
$client->autoflush(1);
close $server;
&printClient();
}
}
sub printClient
{
warn "client connected to pid $$\n";
print $client "Test";
exit 0;
}
答案 0 :(得分:2)
为了避免僵尸进程(在列表中显示为“defunct”),您必须确认他们已停止使用wait函数。如果您对大多数Unix平台上的退出状态不感兴趣,那么在程序开始时将SIGCHLD的处理程序设置为IGNORE就足够了:
$SIG{CHLD}='IGNORE';
有关更详细的讨论,请参阅此处的信号处理部分:http://perldoc.perl.org/perlipc.html