PR
 
関数順 インデックス
目的別 インデックス

構文
 
 fork

返り値
 
 ・親プロセスの場合:子プロセスのプロセスID
 ・子プロセスの場合:0

説明

  • 新しいプロセスを生成します。

使用例

子プロセスでコマンドnetstat -nを実行する(forkを使用)
#!/usr/bin/perl
use strict;
use warnings;

$| = 1; # バッファリングをしない
if (my $pid = fork()) {
  # 親プロセスの処理
  print "wait begin.\n";
  wait(); # 子プロセスの終了を待つ
  print "wait end.\n";
} elsif (defined $pid) {
  # 子プロセスの処理
  exec 'netstat -n';
} else {
  print "Error:$!\n";
}
print "End.\n";
子プロセスでコマンドnetstat -nを実行する(systemを使用)
#!/usr/bin/perl
use strict;
use warnings;

my @command = ('netstat', '-n');

my $ret = system @command;
if ($ret != 0) {
  print "code[$ret]\n";
}
※子プロセスでコマンドを実行する場合,forkのほかにもsystemやqx//を使う方法があります。

ハッシュ%urlsで指定したURLとファイル名に対し,HTTPで指定したURLからファイルをダウンロードして,指定したファイル名で保存する(ダウンロードを並列に実行)
#!/usr/bin/perl
use strict;
use warnings;
use Parallel::ForkManager;
use LWP::Simple;

my %urls = (
  'http://www.example.com/' => 'excom.html',
  'http://www.example.net/' => 'exnet.html',
  'http://www.example.org/' => 'exorg.html',
);

my $pm = Parallel::ForkManager->new(10);

while (my ($url, $file) = each %urls) {
  $pm->start and next;
  
  print "mirror begin($url)\n";
  mirror($url, $file);
  print "mirror e n d($url)\n";
  
  $pm->finish;
}
$pm->wait_all_children;
※複数の子プロセスを同時に実行する場合,forkとwaitpidを使用する方法がありますが,Parallel::ForkManagerモジュールを使う方法がお手軽です