- 论坛徽章:
- 0
|
我想让所有子进程结束以后再打印all OK,代码如下- use POSIX ":sys_wait_h";
- my $num_proc = 0;
- my $count=0;
- $SIG{CHLD} = sub { $num_proc-- };
- my @fileSet=glob "/home/work/tmp/logBK/*";
- foreach(@fileSet){
- my $pid=fork;
- if (!defined($pid)) {
- exit;
- }
- if ($pid == 0) {
- &chidProc($_);
- print "Child $count : end\n";
- exit 0;
- }
- $num_proc ++;
- do {
- sleep(1);
- } until ($num_proc < 10);
- $count++;
- }
- while (waitpid(-1, WNOHANG) > 0){
- 1;
- }
- print "all OK\n";
复制代码 Child 4 : end
Child 5 : end
Child 3 : end
Child 6 : end
Child 2 : end
Child 7 : end
Child 1 : end
Child 8 : end
Child 9 : end
Child 0 : end
Child 11 : end
Child 14 : end
Child 12 : end
Child 10 : end
Child 16 : end
all OK
[root@domain test]# Child 13 : end
Child 15 : end
Child 17 : end
Child 18 : end
Child 19 : end
Child 20 : end
Child 21 : end
Child 23 : end
Child 22 : end
结果all OK在子进程结束前就被打印出来了。。。
为什么
while (waitpid(-1, WNOHANG) > 0){
1;
}
无效呢? |
|