PHP pcntl变量范围

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

我希望能够修改父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中的数组。我明白为什么,但想不出一个好的解决方案,可以让我。你有什么建议吗?全局还是什么?

父进程/子进程将共享相同的stdin/stdout。如果父进程在每次fork()调用之前重新映射其stdin/stdout,则可以为每个子进程指定专用stdin/stdout。这将允许您使用每个孩子自己的通信通道与每个孩子说话,也可以单独倾听每个孩子的声音


然后,只需制定一个简单的通信协议,让子进程将修改后的数据传递回父进程。

父进程/子进程将共享相同的stdin/stdout。如果父进程在每次fork()调用之前重新映射其stdin/stdout,则可以为每个子进程指定专用stdin/stdout。这将允许您使用每个孩子自己的通信通道与每个孩子说话,也可以单独倾听每个孩子的声音


然后,只需制定一个简单的通信协议,让孩子们将修改后的数据传递回父母。

您应该尝试使用共享内存:


如果共享内存有一个众所周知的名称,则可以根据需要在父内存和子内存中使用shmop_open()。注意,您应该使用一个信号量来保护这个共享内存,这样就不会同时发生两次写操作。也就是说,在共享内存上拥有互斥锁

您应该尝试使用共享内存:


如果共享内存有一个众所周知的名称,则可以根据需要在父内存和子内存中使用shmop_open()。注意,您应该使用一个信号量来保护这个共享内存,这样就不会同时发生两次写操作。也就是说,在共享内存上有一个互斥锁

是的,我现在正在使用memcached重构它。我只需要改变很多逻辑,但结果会很好。是的,我现在正在使用memcached重构它。我必须改变很多逻辑,但结果会很好。@Marc B。你能在这里举个简单的例子吗?我很感兴趣@你能举个简单的例子吗?我很感兴趣!