回答編集履歴
2
追加
answer
CHANGED
@@ -6,4 +6,31 @@
|
|
6
6
|
親プロセスでDB接続をオープンしたままの状態で子プロセスを生成してしまうと、子プロセスで接続ファイルIDが同じものを使ってしまい、1つの子プロセスが終了すると、他の子プロセスのDB接続がクローズされてしまいます。
|
7
7
|
ですのでフォークする場合、各子プロセスで新たにDB接続してアクセスを行います。
|
8
8
|
|
9
|
-
CakePHPフレームワークの知識が無いので、DBへの接続が個々に行えるのかが分かりません。(調べてみます)
|
9
|
+
CakePHPフレームワークの知識が無いので、DBへの接続が個々に行えるのかが分かりません。(調べてみます)
|
10
|
+
|
11
|
+
phpのつたない例ですが
|
12
|
+
```php
|
13
|
+
for ($i = 1; $i <= 5; ++$i) {
|
14
|
+
$pid = pcntl_fork();
|
15
|
+
if (!$pid) {
|
16
|
+
sleep(1);
|
17
|
+
print "In child $i\n";
|
18
|
+
|
19
|
+
try{
|
20
|
+
$dbh = new PDO($dsn, $user, $password);
|
21
|
+
}catch (PDOException $e){
|
22
|
+
print('Connection failed:'.$e->getMessage());
|
23
|
+
die();
|
24
|
+
}
|
25
|
+
$sql = 'select * from tableA';
|
26
|
+
$stmt = $dbh->query($sql);
|
27
|
+
|
28
|
+
while($result = $stmt->fetch()){
|
29
|
+
print($result['UserID']." ");
|
30
|
+
print($result['station_id1']."\n");
|
31
|
+
}
|
32
|
+
|
33
|
+
exit($i);
|
34
|
+
}
|
35
|
+
}
|
36
|
+
```
|
1
訂正
answer
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
データベースでエラーが発生している様ですので、子プロセスには、データベースへのアクセスが行われた中で発生している様に見れます。
|
2
2
|
|
3
3
|
一般的にforkされる場合、自身のコピーを作成してサブミットし、同ステップより開始されるイメージです。
|
4
|
-
その際、親から切り離され
|
4
|
+
その際、親から切り離され際にメモリはコピーはされますが、共有はできない状態となります。
|
5
5
|
|
6
6
|
親プロセスでDB接続をオープンしたままの状態で子プロセスを生成してしまうと、子プロセスで接続ファイルIDが同じものを使ってしまい、1つの子プロセスが終了すると、他の子プロセスのDB接続がクローズされてしまいます。
|
7
7
|
ですのでフォークする場合、各子プロセスで新たにDB接続してアクセスを行います。
|