Может ли дочерний процесс получить доступ (чтение и запись) к адресному пространству кучи родительского процесса?Ниже приведена программа, которую я попробовал на 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, одинаковы даже после операции записи.Разве операционная система не должна вызывать исключение, потому что один процесс обращается к памяти за пределами своего адресного пространства?