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
せずに投げっぱなしバックドロップ(?)なのも注意してください。この辺りは調べれば調べるほど奥が深そう。