パスワードを忘れた? アカウント作成
627526 journal

luxの日記: [perl] fork

日記 by lux

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を使うことで回避できました。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

読み込み中...