Вот, сел PERL изучать. Объясните следущее:
Пример из учебника:
my $pid;
unless( $pid = fork ) {
unless( fork ) {
# полезный код
exit 0;
}
exit 0;
}
waitpid($pid,0);
Здесь, как я понимаю, создаётся дочерний поток (1) который создаёт в свою очередь свой дочерний
поток (2). При этом, основной родительский процесс ждёт ожидания своего дочернего потока (1).
У меня есть подозрение, что данная конструкция которая приведена в учебнике предназначена для
того чтобы дождаться завершения внутреннего fork, создающего поток (2). Зачем? Зачем здесь
второй fork, ведь, waitpid и так дождётся завершения дочернего потока (1), вутри которого
можно и были бы выполнить полезный код??
И как правильно создать в цикле несколько потоков и дождаться их завершения?
Есть ли в перле способ сразу инициализировать массив одним значинием при создании?
> Зачем? Зачем здесь второй fork, ведь, waitpid и так
> дождётся завершения дочернего потока
вопрос не про perl. завершения процесса 2 мы как раз
и _не_ дождемся. второй fork видимо для того, чтобы
процесс 2 имел init в качестве parent, тогда нам не
нужно бороться с zombie.
> И как правильно создать в цикле несколько потоков и
> дождаться их завершения?
ну, например...
for (1 .. 10) {
next if fork;
# child works
exit;
}
1 until wait < 0;
> Есть ли в перле способ сразу инициализировать массив одним
> значинием при создании?
my @array = ("value") x 10;