如何限制perl中的子进程?
发布时间:2020-12-16 06:19:00 所属栏目:大数据 来源:网络整理
导读:我编写了一个脚本,其中包括并行生成gcov.我成功了,但它一次创建了17个子进程.但我想一次只创建6个子进程,第7个子进程终止后应该创建第7个子进程. sub gcov_parallel() 2 { 3 print "Generating Gcov...n"; 4 my $kid; 5 my $pid; 6 @list = (@iucall,@iurca
我编写了一个脚本,其中包括并行生成gcov.我成功了,但它一次创建了17个子进程.但我想一次只创建6个子进程,第7个子进程终止后应该创建第7个子进程.
sub gcov_parallel() 2 { 3 print "Generating Gcov...n"; 4 my $kid; 5 my $pid; 6 @list = (@iucall,@iurcall_init,@iurcall_term,@iurcall_uti,@nob,@nobcch,@nobcell,@nobrrc,@nobcall,@rnccall,@cellin fo,@rnccom,@cellrrm,@uerrm,@uerrc,@uecall,@iupcded); 7 my $len_list = scalar(@list); 8 my $maxlen =0; 9 my $count = 0; 10 my $process = 0; 11 $total_components = scalar(@comp_list); 12 13 for(my $comp_count=0; $comp_count < $len_list ; ($comp_count=$comp_count+$no_of_machines)) 14 { 15 #limiting child process to 6 16 if($process == 6) 17 { 18 $pid = wait(); 19 $process=$process-1; 20 } 21 else 22 { 23 $pid = fork(); 24 if($pid eq 0) 25 { 26 for(my $files_count = 0; $files_count < $no_of_machines; $files_count++) 27 { 28 $count = $files_count+$comp_count; 29 if($count < $len_list) 30 { 31 chomp($list[$count]); 32 my @list_gcda =`ls $list[$count]/*.gcda | sort`; &generate_gcov("$list[$count]",@list_gcda); 34 } 35 } 36 wait(); 37 exit; 38 } 39 $process=$process+1; 40 } 41 } 42 do 43 { 44 $kid = waitpid(-1,0); 45 }while $kid > 0; 46 } But i observed while running the script it is skipping files while generating gcov. 解决方法
我想你可以使用
Paralel::ForkManager来做到这一点.
有一个good tutorial on PerlMonks about Paralel::ForkManager. 可能就是这么简单: my $manager = Parallel::ForkManager->new( 6 ); foreach my $command (@commands) { $manager->start and next; system( $command ); $manager->finish; }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |