为什么这个fork循环没有按预期工作?

为什么下面的代码:

#!/usr/bin/perl use strict; use warnings; use Parallel::ForkManager; my $pm = new Parallel::ForkManager(5); my @all_data = ('a','b','c','d','e','f'); foreach my $data (@all_data) { # Forks and returns the pid for the child: my $pid = $pm->start and next; print "Hello $pid\n"; $pm->finish; # Terminates the child process } $pm->wait_all_children; 

打印:

 Hello 0 Hello 0 Hello 0 Hello 0 Hello 0 

我是Perl的新手,我正试图赶上Perl中的多处理

start方法的文档 :

这个方法做叉子。 它返回父进程的子进程的PID,而子进程返回0。

碰巧, fork函数也是一样的,这就是为什么start镜像它的原因。

父母可能需要孩子PID来控制孩子 – 发送信号和东西 – 但孩子通过$$变量知道自己的PID:

 foreach my $data (@all_data) { $pm->start and next; print "Hello $$\n"; $pm->finish; } 

示例输出:

 Hello 22215 Hello 22218 Hello 22219 Hello 22217 Hello 22220 Hello 22216 

我的$ pid = $ pm->开始和下一个;

“和”逻辑将评估为真,如果两个参数都是真的。 如果第一个参数是false,那么“和”逻辑将会快捷,并且不会评估第二个参数

您可能想要使用“或”逻辑。