php 父进程,PHP fork进程 – 在父级中获取子输出

我想实现以下目标:

初始化一个数组.子进程将一些元素添加到数组中.父进程向数组添加一些元素.最后在退出之前,打印所有元素.

以下是我写的代码:

$values=array();

$pid = pcntl_fork();

if (!$pid) {

sleep(2);

$values[]="Put by child";

exit(0);

}

$values[]="Put by parent";

pcntl_waitpid($pid, $status);

print_r($values);

?>

但是,它只打印一个值 – 由父级输出.有人可以解释一下这种行为并建议正确的代码吗?

问候,

J.P

解决方法:

分叉的孩子一旦写到任何地方就会获得他们自己的专用内存空间 – 这就是“写时复制”.虽然shmop确实提供了对公共内存位置的访问,但是在子代之间不共享实际的PHP变量和脚本中定义的内容.

做$x = 7;在一个孩子中,不会让其他孩子的$x也变成7.每个孩子都有自己的专用$x,完全独立于其他人的副本.

您还可以共享内存,或在两个进程之间打开双向通信通道,并构建一个小的api来来回发送数据.

只要父子知道共享内存段的键/键可以在pcnlt_fork之前执行shmop_open.但请记住,pcnlt_fork在子进程中返回0,而在创建子进程失败时返回-1(检查注释/混淆/附近的代码).父亲将在$pid中创建刚刚创建的子进程的PID.

在这里查看:

标签:php,fork

来源: https://codeday.me/bug/20190725/1532964.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值