perl - parallel::forkmanager .... 如何在退出时传递 2 个变量

标签 perl fork pipe

我正在使用 Parallel::ForkManager 将一些变量从子级传递给父级。我可以通过 $var ......我如何通过更多? (再次感谢 Hobbs 帮助我走到这一步)

use Parallel::ForkManager;

my $pm=new Parallel::ForkManager(10); 
my(@cusips,@bad);
$pm->run_on_finish(sub{
my($pid,$exit_code,$ident,$exit_signal,$core_dump,$var,$v)=@_;
print "pid: ".$pid."\n";
print " first: ".${$var}."\n"; 
print " second: ".${$v}."\n";   
});


for(1..3){

$pm->start and next; # do the fork 
my $var=rand();
my $v=rand();

$pm->finish(0,\$var,\$v); # do the exit in the child process 
}


$pm->wait_all_children; 

最佳答案

只可以有一个人 :)

传递数组引用:

$pm->finish(0, [ $var, $v ]);

或哈希引用:
$pm->finish(0, { 'var' => $var, 'v' => $v });

和:
$pm->run_on_finish(sub{
    my ($pid,$exit_code,$ident,$exit_signal,$core_dump,$data)=@_;
    print "pid: ".$pid."\n";
    print " first: ".$data->[0]."\n"; 
    print " second: ".$data->[1]."\n";   
});

或者
$pm->run_on_finish(sub{
    my ($pid,$exit_code,$ident,$exit_signal,$core_dump,$data)=@_;
    print "pid: ".$pid."\n";
    print " first: ".$data->{'var'}."\n"; 
    print " second: ".$data->{'v'}."\n";   
});

关于perl - parallel::forkmanager .... 如何在退出时传递 2 个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6643126/

相关文章:

c - 使用信号和 sigpipe

perl - 如何在mod_perl2下的startup.pl中学习DOCUMENT_ROOT?

github - 如何从 GitHub Web 更新 fork 的 repo?

powershell - 在 PowerShell 中调用不带管道的 Sort-Object

C: fork 新进程失败

时间:2019-02-08 标签:c++calllinuxcommandsforkschilds

c - 使用 fdopen 时文件描述符错误?

perl - 当调用的参数比预期的多时,子程序是否应该嘎嘎作响?

regex - 如何在字边界后打印字符

学生的 perl oops 程序,他们的分数和百分比