コードです、Perl5.6 on Cygwin で100%再現します、他の環境はいまからテスト
しようと思います。

$| = 1;
opendir (DIR,"./lock/");
while (1){
  $j++;
  $pid = fork();
  if ($pid != 0) {# 親です
    while (1){
      seekdir DIR,0;
      @dir = readdir DIR;
      if (@dir > 10){
        print "子の数が上限値です、3秒待ちます\n";
        if (sleep(3) != 3){
           print "sleep に失敗しました\n"
        }
      } else {
        last;
      }
    }
  } elsif ($pid == 0) {# 子です
    $time = int(rand(10));
    mkdir ("./lock/$j",0666);
    print "これは$j個めの子プロセスです、$time秒の処理をします\n";
    sleep ($time);
    rmdir ("./lock/$j");
    exit (0);
  }
}
closedir DIR;