Perl 无法运行分叉,分叉了不需要的进程数

Perl 无法运行分叉,分叉了不需要的进程数,perl,fork,Perl,Fork,我对Perl中的Fork有一个问题。我想从一个脚本一次执行10个Fork进程,所有10个子(Fork)进程都将执行相同的操作(将文件从一个地方复制到另一个地方) 当我执行这段代码时,我的操作系统会挂起,当我实际检查是否有大量的进程同时分叉 这是我的密码: while ($callCount <= $totalCalls) { for (1..$TotalProcessToFork) { print "Call -> $callCount"; if

我对Perl中的Fork有一个问题。我想从一个脚本一次执行10个Fork进程,所有10个子(Fork)进程都将执行相同的操作(将文件从一个地方复制到另一个地方)

当我执行这段代码时,我的操作系统会挂起,当我实际检查是否有大量的进程同时分叉

这是我的密码:

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

while($callCount子类也可以分叉。在子类中,您需要以某种方式退出循环。常见的模式是分叉和执行,或者您可以说
last
子类也可以分叉。在子类中,您需要以某种方式退出循环。常见的模式是分叉和执行,或者您可以说
last

之所以会发生这种情况,是因为当你分叉一个进程时,它会创建两个进程。让我们称它们为
a1
a2
。现在
a1
是父进程,而
a2
是子进程,因此当执行
a2
时,它会创建
b1
b2
。当所有这些都被执行时,它们还会创建新的进程递归。

这是因为当你分叉一个进程时,它会创建两个进程。让我们称它们为
a1
a2
。现在
a1
是父进程,而
a2
是子进程,因此当执行
a2
时,它会创建
b1
b2
。当所有这些都被执行时,它们还会创建新的pro递归访问。

你可能想看看,这可能会让你的生活更轻松


另外,不要使用外部Linux
touch
命令;最好使用。

您可能想看看,这可能会让您的生活更轻松


另外,不要使用外部Linux
touch
命令;最好使用。

好的,我将其修改为:“exec('touch',$callCount)或die$!”,但现在我的主程序在fork完成后退出。这个过程完成后还有更多操作要做,但我的主程序在这里退出。@user1065000,这是因为你从不等待孩子们结束。请参阅
wait
waitpid
。好的,我将其修改为:“exec('touch',$callCount)或die$!”,但现在我的主程序在fork完成后退出。此过程完成后还有更多操作要做,但我的主程序在这里退出。@user1065000,这是因为您从不等待您的孩子结束。请参阅
wait
waitpid
。Hemant Metalia,我注意到您的答案被否决。这很可能是因为他说你的措辞质量不好。我已经编辑了以改进它。-对于未来的答案,请使用正确的标点符号和正字法。花时间制定适当的句子来表达你想说的话,不要只是写下一连串的意识。谢谢你,达克西。对不起,我的英语不好,我下次会注意的。赫曼特·梅塔利亚,我注意到你的答案被否决了。这很可能是因为你的措辞质量不好。我已对其进行了编辑以改进。-对于未来的答案,请使用正确的标点符号和正字法。花时间制定适当的句子来表达你想说的话,不要只是写下一连串的意识。谢谢daxim sorr我的英语很差,下次我会注意的。