如何在perl中使用fork时在子进程和父进程之间共享变量

cha*_*itu 10 perl fork shared ipc global-variables

我在我的代码中使用fork.在我的代码中调用fork之前,父进程声明了一个全局变量.因此,在fork调用之后,子进程在其自己的线程堆栈上获取全局变量的单独副本,或者共享全局变量的现有父实例.所以我猜这里有三种可能性1)子进程获取父进程中声明的全局变量的单独实例2)子进程与父线程共享全局变量.(这可能不是真的)3)子进程没有任何关于父线程中的全局变量的信息

如果2或3选项都为真,我想知道在子进程中是否有任何方法可以获取全局变量及其在执行fork()时的"状态/值"在父线程中声明.

从广义上讲,有没有办法访问父进程变量,并且在使用fork()创建的子进程中有状态.

ike*_*ami 12

每个进程都有自己的内存空间.进程通常无法访问其他进程的内存.

在这种情况下fork,子进程的内存空间作为父对象的精确副本开始.这包括变量,代码等.在一个中更改任何这些不会改变另一个中的任何类似变量.

所以答案是#1.


即使你可以,你应该问的问题不是"我如何分享变量?" 但"我如何交换数据?".具有受控通道不易出错,因为它提供更松散的耦合并且在远距离处的动作更少.

管道通常用于父母和孩子之间的沟通,但还有许多其他选择.