【发布时间】:2018-08-12 00:17:12
【问题描述】:
让我们来看看clone(2)的一个非常简单的用法
int stack_func(void *arg)
{
*(int*)arg = 10;
return 0;
}
int main()
{
int a = 50;
clone(stack_func, malloc(1024*1024) + (1024*1024), SIGCHLD, &a);
sleep(2); //Just to be sure
printf("%d\n", a);
return 0;
}
从clone() 的手册页中指定允许父子进程共享内存,父进程中的printf() 应该打印10 而不是50。但它没有发生。为什么?
- 由于孩子的堆栈从顶部的
stack_func开始,*arg(不是variable arg)将存储在哪里? - 为什么子进程在修改
arg的引用时会得到一个新的副本?
【问题讨论】:
标签: c linux memory-management stack clone