Windows 为什么';这个分叉环不能像预期的那样工作吗?

Windows 为什么';这个分叉环不能像预期的那样工作吗?,windows,perl,multiprocessing,fork,activestate,Windows,Perl,Multiprocessing,Fork,Activestate,为什么会出现以下代码: #!/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: m

为什么会出现以下代码:

#!/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中的多处理:

此方法不执行fork。它为父进程返回子进程的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
从:

此方法不执行fork。它为父进程返回子进程的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

my$pid=$pm->开始和下一步

如果两个参数都为真,“and”逻辑将计算为真。如果第一个参数为false,则“and”逻辑将显示快捷方式,并且不会计算第二个参数


您可能需要使用“或”逻辑来代替。

my$pid=$pm->start and next

如果两个参数都为真,“and”逻辑将计算为真。如果第一个参数为false,则“and”逻辑将显示快捷方式,并且不会计算第二个参数


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

我在Windows上,我使用的是
#/usr/bin/perl
。刚刚注意到……我在Windows上,我使用的是
#/usr/bin/perl
。刚刚注意到……这个片段来自。我的理解是,
$pm->start and next
将为父级执行
next
(自ppid!-0起),即自
$pm->start and next起,继续为子级执行分叉和打印将计算为
false
,因为
$pm->start
的pid将为0@Cratylus这正是它所做的!但是,由于
start
在您分配给
$pid
的子项中返回零,因此每个子项都会打印
Hello 0
。您希望使用
$
来获取子对象中的PID。此代码段来自。我的理解是,
$pm->start and next
将为父级执行
next
(自ppid!-0起),即自
$pm->start and next起,继续为子级执行分叉和打印将计算为
false
,因为
$pm->start
的pid将为0@Cratylus这正是它所做的!但是,由于
start
在您分配给
$pid
的子项中返回零,因此每个子项都会打印
Hello 0
。您希望使用
$$
来获取子项中的PID。
开始和下一步
是正确的约定,正如Parallel::ForkManager文档中所使用的那样。@AKHolland,是的corect。但该文档假定程序希望在子进程中执行某些操作。但在这种情况下,它希望在父进程中执行某些操作(打印子pid)。
start和next
是正确的约定,正如Parallel::ForkManager文档中所使用的那样。@AKHolland,是的corect。但该文档假定程序希望在子进程中执行某些操作。但在本例中,它希望在父进程中执行某些操作(打印子pid)。