首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP pcntl变量作用域

PHP pcntl变量作用域
EN

Stack Overflow用户
提问于 2011-07-27 03:58:22
回答 2查看 2.5K关注 0票数 1

我希望能够修改父pid中的数组元素。下面是一些示例代码:

代码语言:javascript
复制
$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中的数组。我理解为什么,但是想不出一个好的解决方案来允许我这样做。你能给我一些建议吗?全局还是别的什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-27 04:38:52

父进程/子进程将共享相同的stdin/stdout。如果进程在每次fork()调用之前重新映射其标准输入/标准输出,那么您可以为每个子进程指定专用的标准输入/标准输出。这将允许您使用每个孩子自己的通信通道与每个孩子交谈,还可以单独听取每个孩子的意见。

然后,只需想出一个简单的通信协议,让子代将修改后的数据传回父代即可。

票数 2
EN

Stack Overflow用户

发布于 2011-07-27 04:42:51

您应该尝试使用共享内存:http://www.php.net/manual/en/ref.shmop.php

为共享内存指定一个众所周知的名称将允许您根据需要在父内存和子内存中使用shmop_open()。注意,您应该使用信号量来保护这个共享内存,这样就不会同时发生两个写操作。也就是说,在共享内存上有一个相互排它的锁

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6835819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档