可以用clone来模拟vfrok的行为吗?到目前为止,我已经
pid=clone(fn,cStack,SIGCHLD|CLONE_FS | CLONE_FILES | CLONE_VM | CLONE_VFORK,NULL);但我仍然需要传递我自己的堆栈,所以新进程在不同的堆栈框架中工作,但在相同的地址空间中工作(因为CLONE_VM),据我所知,如果我调用vfork而不使用exec中的某些函数,新进程将在与父进程相同的地址空间中操作,并且它使用相同的堆栈框架。
那么,有没有可能用clone创建一个新的进程,它在相同的地址空间中运行,并且使用与父进程相同的堆栈帧?
发布于 2012-04-06 20:56:57
如果不用汇编器编写函数,这是不可能的。这是一个无法“修复”的基本问题;对于大多数archs (任何将返回地址存储在堆栈上的arch ),甚至vfork系统调用包装器本身都必须用汇编编写,而不是用C编写。这是因为子进程使用与父进程相同的堆栈运行后,可能会覆盖父进程中函数(vfork、clone或其他包装器)需要返回的返回地址。
在汇编程序中,您只需在进行syscall之前将返回地址保存在一个寄存器中。
https://stackoverflow.com/questions/10043173
复制相似问题