Perl では fork 関数を使って子プロセスを生成することができます。複数のプロセスを fork したい場合のソースコードのメモ。
#!/usr/bin/perl
sub forked_process {
print "I'm a child. My pid is $$
";
sleep 5;
}
my $num_fork = 5;
while ($num_fork--) { # $num_fork で指定された回数だけループ
my $pid = fork; # 子プロセスを生成する
if (!defined $pid) {
die "fork failed"; # 生成に失敗した
}
elsif (!$pid) {
&forked_process; # 子プロセスの本体(関数)
print "$$ exit
";
exit; # 子プロセスを終了する
}
# 親プロセスなのでループを継続する
}
while で必要な回数だけ回して、ループ内部で fork します。親プロセスの場合だけループを継続して、子プロセスの場合はそのまま exit しないと無限ループになるので注意。
(2010/02/18追記) あと、子プロセスについては wait せずに投げっぱなしバックドロップ(?)なのも注意してください。この辺りは調べれば調べるほど奥が深そう。