exl*_*mer 4 linux system-calls stack clone
我一直在仔细阅读 clone() 的 linux 手册页,我了解 clone() 包装器和“原始”系统调用之间的区别。但我不明白的是为什么父进程需要为子进程分配一个堆栈,即使包装器中没有使用 CLONE_VM。
如果不使用 CLONE_VM,包装器是否会简单地忽略堆栈参数?为什么需要它呢?原始系统调用允许它为空,这是有道理的,但我不明白为什么包装器需要这个。即使您不告诉它,包装器也会让孩子和父母共享内存吗?
Ste*_*itt 5
所需的栈参数齐头并进在手用的fn说法。原始内核系统调用并不总是需要堆栈,因为它的行为类似于fork:子进程中的执行在系统调用返回时开始。然后 libc 包装器需要设置调用fn,为此,它需要堆栈(并且一直这样做)。
fn
fork
因此,在调用包装器时总是需要一个堆栈,以便将信息通过clone系统调用传递给调用fn函数的代码(thread_start在 glibc 代码中)。
clone
thread_start
归档时间:
4 年,8 月 前
查看次数:
284 次
最近记录: