Macos Mac OS:如何在不复制进程状态的情况下进行分叉?

Macos Mac OS:如何在不复制进程状态的情况下进行分叉?,macos,process,fork,darwin,xnu,Macos,Process,Fork,Darwin,Xnu,我需要使用不同的PID创建一个执行单元,但不从初始进程(打开的文件、内存等)获取资源 在Linux上,用于此目的。在其他BSD上。是否有与Mac OS相当的产品 或者,标准execve可用于重置流程环境,但需要文件系统上的名称,这对我来说是次优的。在Linux上,可以创建并与一起使用。是否存在与Mac OS等效的文件?我认为不可能执行macOS上全局文件系统命名空间中不存在的文件。我想这就是你要问的?(macOS上的fork()的唯一替代方案是vfork()和posix_spawn(),这两种方

我需要使用不同的PID创建一个执行单元,但不从初始进程(打开的文件、内存等)获取资源

在Linux上,用于此目的。在其他BSD上。是否有与Mac OS相当的产品


或者,标准
execve
可用于重置流程环境,但需要文件系统上的名称,这对我来说是次优的。在Linux上,可以创建并与一起使用。是否存在与Mac OS等效的文件?

我认为不可能执行macOS上全局文件系统命名空间中不存在的文件。我想这就是你要问的?(macOS上的
fork()
的唯一替代方案是
vfork()
posix_spawn()
,这两种方法对您的尝试都没有任何帮助,macOS上的其他
exec*()
变体的功能并不比
execve()
本身更强大。)是的,这就是我要问的。听到这是不可能的,真糟糕,但这正是我期待听到的。我想我至少可以通过在我分配的区域上使用
vm_inherit
vm_inherit_SHARE
来限制一些损害(不确定,我不太熟悉Mac特定的系统编程)是的,这应该适用于内存。我认为对于文件描述符,您没有什么可以做的,因为您只能在exec上标记它们,而不能在fork上标记它们。您可以探索的另一个选项是使用Mach任务API,即
task\u create()
,然后操纵内存区域,然后操作
thread\u create\u running()
,以实际启动执行。但是,这些都是极低级别的API,您需要做一些额外的工作才能使POSIX API在新任务中工作。(例如,您需要将主线程显式注册为POSIX线程)我不知道在使用
task\u create()
时,文件描述符会发生什么变化。这是一个很好的线索,但显然。