PHP pcntl变量范围
我希望能够修改父pid中的数组元素。下面是一些示例代码:PHP pcntl变量范围,php,fork,pcntl,Php,Fork,Pcntl,我希望能够修改父pid中的数组元素。下面是一些示例代码: $arrayContainer = array( array( "id" => 1, "name" => "Lenny" ), array( "id" => 2, "name" => "Dudley" ), array( "id" => 3, "nam
$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中的数组。我明白为什么,但想不出一个好的解决方案,可以让我。你有什么建议吗?全局还是什么?父进程/子进程将共享相同的stdin/stdout。如果父进程在每次fork()调用之前重新映射其stdin/stdout,则可以为每个子进程指定专用stdin/stdout。这将允许您使用每个孩子自己的通信通道与每个孩子说话,也可以单独倾听每个孩子的声音
然后,只需制定一个简单的通信协议,让子进程将修改后的数据传递回父进程。父进程/子进程将共享相同的stdin/stdout。如果父进程在每次fork()调用之前重新映射其stdin/stdout,则可以为每个子进程指定专用stdin/stdout。这将允许您使用每个孩子自己的通信通道与每个孩子说话,也可以单独倾听每个孩子的声音
然后,只需制定一个简单的通信协议,让孩子们将修改后的数据传递回父母。您应该尝试使用共享内存:
如果共享内存有一个众所周知的名称,则可以根据需要在父内存和子内存中使用shmop_open()。注意,您应该使用一个信号量来保护这个共享内存,这样就不会同时发生两次写操作。也就是说,在共享内存上拥有互斥锁您应该尝试使用共享内存:
如果共享内存有一个众所周知的名称,则可以根据需要在父内存和子内存中使用shmop_open()。注意,您应该使用一个信号量来保护这个共享内存,这样就不会同时发生两次写操作。也就是说,在共享内存上有一个互斥锁是的,我现在正在使用memcached重构它。我只需要改变很多逻辑,但结果会很好。是的,我现在正在使用memcached重构它。我必须改变很多逻辑,但结果会很好。@Marc B。你能在这里举个简单的例子吗?我很感兴趣@你能举个简单的例子吗?我很感兴趣!