代码:
$data = array();
$p = pcntl_fork();
if ($p === -1) {
exit('创建进程失败!' . PHP_EOL);
} else if ($p === 0) {
// 修改主进程中的数据
$data = array('cxl' , 'ys');
} else {
pcntl_wait($status);
// 子进程返回后,查看数据变动
print_r($data); // 结果 array(),没有发生任何变化!
// 子进程无法修改主进程中的数据。
// 子进程中该如何修改主进程中的数据,实现数据共享??
}
结果:
进程间该如何进行数据交流??
大家讲道理2017-04-24 09:14:06
子进程创建后,已经与父进程的变量数据脱钩,如果要实现子进程修改父进程变量,需要通过进程间通讯并自行实现相关代码来完成。当然,也可以通过共享内存的方式实现变量的共享。
迷茫2017-04-24 09:14:06
刚好在学习pcntl,也想到进程间通信的事情,搜到的其中一个可用方法-使用消息队列,觉得不太复杂,于是在你代码上加了几句,可以试试,互助共勉。
// 创建key和消息队列
$msg_key = ftok(__FILE__, 'a');
$msg_queue = msg_get_queue($msg_key);
$data = array();
$p = pcntl_fork();
if ($p === -1) {
exit('创建进程失败!' . PHP_EOL);
} else if ($p === 0) {
// 修改主进程中的数据
// 将修改的数据发送到消息队列
msg_send($msg_queue, 1, array('cxl' , 'ys'));
exit();
} else {
pcntl_wait($status);
// 子进程返回后,查看数据变动
// 接收队列中的数据
msg_receive($msg_queue, 1, $msg_type, 1024, $msg);
// 销毁队列
msg_remove_queue($msg_queue);
$data = $msg;
print_r($data);
}