2

我有一个散列,当我尝试为每个散列键创建一个子进程时,它的行为不符合我的预期。

请建议更改? 假设$pid永远不会小于 0。

foreach $elem(keys %hash)
{
    $pid = fork();

    if ($pid) 
    {
       push @pids, $pid;
       print "in parent $$\n";
    }
    else
    { 
        print "in child $$\n"; 
    }
}
4

2 回答 2

5

执行子进程时,别忘了退出,否则子进程也会执行fork,创建的进程总数会比预期的多。

foreach $elem(keys %hash)
{
    $pid = fork();

    if ($pid) 
    {
       push @pids, $pid;
       print "in parent $$\n";
    }
    else
    { 
        print "in child $$\n"; 
        exit(0); #<--- add this or exec external program
    }
}
于 2013-07-04T09:42:19.817 回答
1

您应该检查是否fork()有效:

foreach $elem(keys %hash)
{
    $pid = fork();

    if( ! defined( $pid )){
        die "could not fork\n";
    }

    if ($pid) 
    {
       push @pids, $pid;
       print "in parent $$\n";
    }
    else
    { 
        print "in child $$\n"; 
    }
}
于 2013-07-04T13:26:54.410 回答