luxの日記: [perl] fork
Perlにはプロセス分岐を行うための fork() という関数があります。
これを使うとある処理を行っている間に同時に別の処理を行うことができます。以下が使い方の例です。
100回の繰り返しのそれぞれでプロセスを分岐しています。
my $count = 100;
$SIG{CHLD} = "IGNORE";
while ($count--) {
my $pid = 0.5;
eval('$pid = fork();');
if ($pid == 0.5) {
print qq![$count] $$ fork not supported.\n!;
last;
} elsif ($pid) {
print qq![p$count] $$:$pid parent process\n!;
} else {
print qq! [c$count] $$:$pid child process\n!;
exit;
}
}
exit;
このようにforkはとても便利なのですが、
Windows上のActivePerl5.8.3 で実行すると22回ほど分岐した後、Perlがアプリケーションエラーを起こしてとまってしまいました。
これはWindowsにそもそもシステムコールforkが存在しないため、ActivePerlがエミュレーションしており、このエミュレーションに制限があるためのようです。
結局、Cygwinを使うことで回避できました。
[perl] fork More ログイン