- - PR -
親子プロセス間のデータ受渡し
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-08-12 14:12
質問ばかりで済みません。
ActivePerlで開発を行っています。 後記のコーディングの子で計数している$Rcntを子の処理が終わったら親で参照したいのですが当然ながらグローバルにしていても見れません。 このプログラムは同時に何本か走りますので$Rcntの値をファイル渡しで参照させることも上書きされるので難しいです。 何か良い知恵は無いものでしょうか? 以上 if ($pid = fork()) { # 親 (省略) wait; if($Rcnt >= 500){ <−ここで使いたい (省略) } (省略) return $RetNo; } else { # 子 (省略) $Rcnt+++ (省略) exit; } | ||||
|
投稿日時: 2004-08-12 14:33
どももです。がるともうします。
ちょいと、ヒントだけ。 もし「ど〜してもわからない」ようであれば、また質問など していただけると。 手段1:プロセスIDを使う 子プロセスのプロセスIDをベースにファイル名を作れば、重複しない ファイル名が生成できるので、そこで値のやり取りが可能か、と。 手段2:プロセス間通信 ActivePerlってことはWindowsですよね? なのでちぃと不安ですが。 プロセス間通信ってのはいつでも便利な手法かと思います。 調べてみるのもまた一興か、と。 頑張ってください ^^ | ||||
|
投稿日時: 2004-08-12 16:15
済みません。手段1であれば出来るかとやってみました。PERLはど素人なので書き方がいけないのかも知れませんが子プロセスでは0を返すので次の様に成ってしまいました。
$pid = fork(); $LnkFil="LINK".abs $pid; if ($pid) { # 親 print "---->$LnkFil\n"; ←ここではLINK2384の様になりますが! } else { # 子 print "---->$LnkFil\n"; ←ここではLINK0になってしまいます。 exit; } } | ||||
|
投稿日時: 2004-08-12 16:33
Perlは最近めっきり書かなくなりました。 ところで、自分自身のプロセスのIDって$$とかで取れませんでしたっけ? | ||||
|
投稿日時: 2004-08-12 16:52
どもでふ。
おばけさんがほぼ回答を出されているので蛇足かとは思うのですが。
例えば、こげな感じでいかがなもんでしょ? うまくいくか、また悩んでしまったら書き込みしてください〜 ^^ [ メッセージ編集済み 編集者: がるがる 編集日時 2004-08-12 16:53 ] | ||||
|
投稿日時: 2004-08-12 23:00
有難う御座いました。
親ではfork()で返されたPIDを使い子では特殊変数の$$を使えば良かったのですね! 早速、確認しました。 やっと、完成と思い開発機から運用で使う通信サーバーにセットアップしたら、「fork()はサポートされていません。」と言うエラーで使えませんでした。 結局、子プロセスを発生させないで待たせる方法に成ってしまいました。 折角出来たのに残念です。 | ||||
1
