免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2195 | 回复: 1
打印 上一主题 下一主题

多进程结束问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-12 15:07 |只看该作者 |倒序浏览
1.开了50个子进程(每个子进程都是打印进程号,等5秒然后退出,fork在for循环里,中间没有等待,代码如下)

试了几次,结束后$num_proc总是不为0(为2或3)导致程序无法结束,猜测是子进程结束时同时发出信号导致$num_proc收到多个信号但却只自减了一次。

这种情况怎么修改才能让它正常结束?谢谢指教


$SIG{CHLD} = sub { $num_proc-- };
for (my $i = 0; $i < 10; $i ++) {
    ## == fork a new process ==
    my $pid = fork();
    if (!defined($pid)) {
        print "Error in fork: $!";
        exit 1;
    }
    if ($pid == 0) {
        ## == child proc ==
        print "Child $i : My pid = $$\n";
        sleep(5);
        print "Child $i : end\n";
        exit 0;
    }
    $num_proc ++;
    ## == if need to collect zombies ==
    if (($i-$num_proc-$num_collect) > 0) {
        while (($collect = waitpid(-1, WNOHANG)) > 0) {
            $num_collect ++;
        }
    }
}
do {
    sleep(1);
} until ($num_proc == 0);


2.同样是上面的代码,子进程调用一段执行大约13秒左右的程序,然后同时执行40个花了45秒左右。如果才能改进,进一步缩短时间?求指教,谢谢~

论坛徽章:
0
2 [报告]
发表于 2011-12-12 16:13 |只看该作者
是不是开的进程越多,系统资源就利用的越充分?
还是快速让机器死掉的办法。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP