无法运行Fork,不需要的进程数是分叉的

时间:2011-11-28 10:42:14

标签: perl fork

我遇到了Perl中的Fork问题。我想从一个脚本执行10个Fork进程,所有10个子进程(分叉)进程都会做同样的事情(将文件从一个地方复制到另一个地方)。

当我执行此代码时,我的操作系统挂起,当我实际检查时,一次分叉的进程很多。

这是我的代码:

while ($callCount <= $totalCalls) {
 for (1..$TotalProcessToFork) {
         print "Call -> $callCount";
         if($pid = fork) {
             #in Parent Process
             print " :: PID -> $pid\n";
             push(@list_of_pid, $pid);
         } else {
             #in Child Process
             `touch $callCount`;
         }
         $callCount++;
     }
 }

现在,当我执行此代码时,大约有1000个已处理的子项被执行。

任何人都可以告诉我我在这里做错了什么。

3 个答案:

答案 0 :(得分:4)

孩子们也分叉了。您需要在子案例中以某种方式退出循环。一个常见的模式是fork和exec,或者你可以说last

答案 1 :(得分:1)

这是因为当您分叉进程时,它会创建两个进程。让我们称他们为a1a2。现在a1是父级,a2是子级,因此在执行a2时,会创建b1b2。当这些全部执行时,它们也会递归地创建新进程。

答案 2 :(得分:1)

您可能需要查看Parallel::ForkManager,这可能会让您的生活更轻松。

另外,不要使用外部Linux touch命令;最好使用File::Touch