我希望能够修改父pid中的数组元素。下面是一些示例代码:
$arrayContainer = array(
array(
"id" => 1,
"name" => "Lenny"
),
array(
"id" => 2,
"name" => "Dudley"
),
array(
"id" => 3,
"name" => "Simon"
),
);
foreach ($arrayContainer as $key => $element) {
$pid = pcntl_fork();
if($pid == -1) {
// Something went wrong (handle errors here)
die("Could not fork!");
} elseif($pid == 0) {
$arrayContainer[$key]['size'] = 123;
$arrayContainer[$key]['fileName'] = 'somefile.txt';
// The child dies after a short while, becoming a zombie
exit();
} else {
// This part is only executed in the parent
}
}因此,当这个脚本结束时,我在子进程中编写的两个元素在foreach循环的结尾处并不存在。我不能从子pid中修改父pid中的数组。我理解为什么,但是想不出一个好的解决方案来允许我这样做。你能给我一些建议吗?全局还是别的什么?
发布于 2011-07-27 04:38:52
父进程/子进程将共享相同的stdin/stdout。如果父进程在每次fork()调用之前重新映射其标准输入/标准输出,那么您可以为每个子进程指定专用的标准输入/标准输出。这将允许您使用每个孩子自己的通信通道与每个孩子交谈,还可以单独听取每个孩子的意见。
然后,只需想出一个简单的通信协议,让子代将修改后的数据传回父代即可。
发布于 2011-07-27 04:42:51
您应该尝试使用共享内存:http://www.php.net/manual/en/ref.shmop.php
为共享内存指定一个众所周知的名称将允许您根据需要在父内存和子内存中使用shmop_open()。注意,您应该使用信号量来保护这个共享内存,这样就不会同时发生两个写操作。也就是说,在共享内存上有一个相互排它的锁
https://stackoverflow.com/questions/6835819
复制相似问题