我想开十个子进程,可是却成死循环。???

我想开十个子进程,可是却成死循环。???

use strict;
use POSIX ":sys_wait_h";
$SIG{CHLD} = \&REAPER;
sub REAPER {
  my $pid;
  while (($pid = waitpid(-1, WNOHANG)) > 0) {
      }
}

my $i = 0;

print "this is script begin pid $$ \n" ;

while ( $i < 10 ){
        my $pid = fork ;
        if ( $pid == 0 ){
                print "this is child num: $i pid : $pid  \$\$: $$ \n";
        } else {

                sleep 10;
                print "this is parent num: $i pid: $$ fro \$\$: $$ \n";
        }
        $i++;

}
print "this is script end pid $$ \n";



我想开十个子进程,可是却成死循环。这是为什么?哪儿出了?
你忘了退出子进程了

[Copy to clipboard] [ - ]
CODE:
use strict;
use warnings;

use POSIX ":sys_wait_h";
$SIG{CHLD} = \&REAPER;
sub REAPER {
        my $pid;
        while (($pid = waitpid(-1, WNOHANG)) > 0) {
        }
}

my $i = 0;

print "this is script begin pid $$ \n" ;

while ( $i < 10 ){
        my $pid = fork ;
        if ( $pid == 0 ){
                print "this is child num: $i pid : $pid  \$\$: $$ \n";
                exit;
        } else {

                sleep 10;
                print "this is parent num: $i pid: $$ fro \$\$: $$ \n";
        }
        $i++;

}
print "this is script end pid $$ \n";

可是后面的 print "this is script end pid $$ \n";这个就不能运行了??
没有死循环吧。


QUOTE:
原帖由 miaho 于 2008-12-14 20:58 发表
可是后面的 print "this is script end pid $$ \n";这个就不能运行了??

变通下嘛,把 exit; 改成 last; 不就成了?


QUOTE:
原帖由 放驴娃 于 2008-12-14 21:06 发表
没有死循环吧。

是没有死循环,但创建的进程就远不止 10 个了
没有死循环,只是循环了1024次。