免费注册 查看新帖 |

Chinaunix

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

perl多进程中,父进程的sleep失效的问题,求帮助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-11 19:32 |只看该作者 |倒序浏览
#!/usr/bin/perl
use warnings;
use strict;

use POSIX ":sys_wait_h";

my $collect;
my $zombies = 0;

$SIG{CHLD} = sub {$zombies++};

for (my $i = 0; $i < 5; $i ++) {

    my $pid = fork();

    if ($pid == 0) {

        print "Child $i : My pid = $$\n";
        sleep(2);
        print "Child $i : end\n";
        exit 0;
    }

    if($zombies > 0) {
       while( ($collect=waitpid(-1, WNOHANG)) > 0 ) {
            $zombies--;
        }
    }
    sleep(5);                                                         #这个5秒好像没用,发现屏幕的输出间隔是子进程中的sleep(2),是否与信号有关呢?求帮忙解释一下
    print "$i ------ end\n";
}
exit 0;

论坛徽章:
0
2 [报告]
发表于 2013-03-11 22:10 |只看该作者
这个我已回复N次了。child的退出信号SIGCHLD会唤醒parent的sleep,这是POSIX设计之一。

论坛徽章:
0
3 [报告]
发表于 2013-03-11 23:39 |只看该作者
回复 2# 兰花仙子


真的搜到以前的回复了,感谢仙子不耐其烦的回答。我再看一遍提问的智慧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP