- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perlのforkについて)
Perlのforkについて
このQ&Aのポイント
- Perlのforkを使用して、パラレルでDBに格納するプログラムを作成しています。しかし、forkについて理解が不十分であり、お知恵を拝借したいです。
- パラレルでのDB格納のために、親子のプロセスが完了したら後続処理を行い、0を戻したいですが、現在の方法では子プロセスが終了した後にreturnしてしまいます。
- 親子の処理が完了した後に後続処理に移るためには、どのようにすればよいでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
子プロセスはexitしてしまって構いません。 別プロセスなので、親には影響しません。 >パラレルでのDB格納です。 蛇足ですが、DB格納はデータベースハンドルをコピーすると異常事態にならないとも限らないので、個別に取得した方がいいですよ。 以下サンプルです。 インデントは全角スペースになっています。 ------------------------------------------------------- #!/usr/bin/perl use strict; if(fork){ print("parent hello\n"); wait; }else{ print("child hello\n"); sleep 3; print("child exit\n"); exit; } print("parent finish\n"); ------------------------------------------------------- モジュールを使うと楽です。 #!/usr/bin/perl use strict; use Parallel::ForkManager; # 並行処理は四つ my $pm = Parallel::ForkManager->new(4); my @id = (1 .. 10); for(@id){ # 子の処理 $pm->start and next; print("this is $_\n"); sleep 2; $pm->finish; } # 親はただ待つ $pm->wait_all_children; print("parent finish\n");
お礼
おかげ様で解決いたしました。 ありがとうございました。