0

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;
}
4

1 に答える 1

2

ゾンビ プロセス (リストでは "機能していない" と表示されます) を回避するには、プロセスが待機機能の使用を停止したことを確認する必要があります。ほとんどの Unix プラットフォームでの終了ステータスに関心がない場合は、プログラムの開始時に SIGCHLD のハンドラを IGNORE に設定するだけで十分です。

$SIG{CHLD}='IGNORE';

より詳細な議論については、こちらのシグナル処理部分を参照してください: http://perldoc.perl.org/perlipc.html

于 2013-08-02T05:40:59.683 に答える