最近写程序用到了 fork ,记一下。
我在 perl 里面某个地方开始,fork 多个进程去操作 db,主进程等子进程完事后,再继续后面的操作。
use POSIX ":sys_wait_h";
my $thread_num = 5;
my %pids = ();

# $dbi->{InactiveDestroy} = 1 用到 dbi 的话还要设置这个,要不子进程exit后,dbi
# 连接就断了

# .....前面的程序
for ( 1..$thread_num ) {
	my $pid = fork;
	if (not $pid) { # 子进程
		$pids{$pid} = 1;
		# blalbalbla... 子进程去干活
		eixt 0; # 要记得 exit ,要不子进程还会继续执行后面的。
	} else { # 主进程
		# balbalbal ... 如果没事做也可以不写
	}
}

while( keys( %pids ) ) {
	my $kid = waitpid(-1,WNOHANG);
	if ($kid >0) {
		delete $pids{$kid};
		print "$kid end.\n";
	} else {
		sleep 1; # 继续等,如果有时间限制,可以在这里去 kill 子进程
	}
}

# ....继续后面的程序


还可以参考这个 http://www.perlmonks.org/?node_id=619722