我知道该fork()
函数创建了一个与其父进程相同的进程,只是它具有的 PID 不同。它们最初具有相同的变量,对这些变量所做的更改不会相互影响。但是当一个全局指针变量被共享时会发生什么呢?
我已经编写了一些代码并打印了结果。看起来父进程和子进程的指针指向相同的内存位置,但是对这些内存位置(即*p = 1
父进程和子进程)所做的更改*p = 2
不会相互影响。另请注意,我创建父进程wait(NULL)
,直到子进程退出。所以子进程改变了指针指向的值,该指针与父进程的指针具有相同的内存地址。
我知道什么时候fork()
被调用,父进程克隆所有内容:寄存器、程序计数器等。但这怎么可能呢?子进程退出后,父进程的变量值不应该改变吗?是因为系统将所有内容(包括父进程的指针变量)都放入堆栈并在子进程终止时弹出它们?