子进程可以访问(读写)父进程的堆地址空间吗?以下是我在http://www.ideone.com/R5vDT尝试的程序,它运行成功:
int main(){
int *p = (int*)malloc(sizeof(int));
if(fork()){
//parent process
*p = 25;//Write
printf("Parent %d: %d %p\n", getpid(), *p, p);//Read
}else{
//child process
*p = 15;//write
printf("Child %d: %d %p\n", getpid(), *p, p);//read
}
return 0;
}
输出是:
Parent 30597: 25 0x9781008
Child 30600: 15 0x9781008
我已经阅读过关于 COW(写入时复制)的信息,但 p 指向的地址即使在写入操作之后也是相同的。操作系统不应该因为一个进程正在访问其地址空间之外的内存而引发异常吗?