【发布时间】:2015-03-28 16:41:04
【问题描述】:
子进程可以更改其父进程共享的静态 int 吗?类似于这个简单的例子:
static int changeMe = 1;
...
int main() {
if (fork()=0){
changeMe = 0;
}
wait(0);
printf(1, "changeMe value is: %d., changeMe);
}
我知道孩子创建了父记忆的克隆。但我实际上希望孩子会改变其父母的价值观 - 有可能吗?
【问题讨论】:
-
IPC,没那么简单。
-
一句话,没有。如果你想做类似的事情,你可以使用共享内存。
-
fork() 开始一个新进程。该过程获取父数据的副本。所以子进程无权访问父数据。
-
没有。如果您想这样做,您需要显式分配共享内存并使用同步原语,以确保一个进程看到另一个进程所做的更改。
-
关于提供的代码。行后:'changeMe = 0;需要有一个 exit() 语句。否则子进程将继续执行代码(父进程正在执行相同的代码),结果可能会令人困惑。孩子将永远挂在等待(0);陈述。父母也一样,因为孩子永远不会退出
标签: c fork parent-child child-process