全局变量,子进程和父进程

时间:2012-02-02 01:29:15

标签: linux

我有一个问题实际上我对子进程和父进程没有了解。当我在子进程中更改全局变量时,这些更改不会影响父进程。我在这个网站上看到了一句话。它说:“修改父或子中的任何变量都不会看到对另一个变量的更改。”你能提供更多信息吗?谢谢。

2 个答案:

答案 0 :(得分:4)

我认为您对流程主题之间的区别感到困惑。

进程可以包含多个线程。进程有自己的地址空间和系统变量(例如文件句柄)。进程只能通过IPC机制进行交互,否则无法直接触及其他进程变量。每个进程都有一个操作系统用来识别它的PID(至少在linux中)。进程可以在进程之上运行许多线程。

线程是一个可以在进程内运行的唯一构造。每个线程都有自己唯一的堆栈指针(指向程序集执行)和唯一的注册表值。当OS在线程之间切换时,它会切换当前执行行并恢复与该线程一起存储的所有resgistry值。但是,进程中的线程共享所有相同的内存,这就是为什么您可以修改线程之间的全局变量和类变量并且它们受到影响的原因。

如果有人想要他们可以。这只是我认为理解进程和线程之间差异之间的一些重要点的简要总结。

答案 1 :(得分:2)

在调用fork()之后,创建了父级的精确副本。(好吧,不是真的。请参阅联机帮助页以获取详细信息)因此,子级和父级都有单独的进程表&不同的地址空间。因此声明modifying any variables in the parent or child will not see the changes also being made to the other one.

请阅读manpage of fork()了解详细信息。