© Syeerzy|Powered by LOFTER
写了 30 年代码的大叔

Windows对应的是spawn api调用,  本质上是创建了一个空壳, 然后把要执行的exe文件装载进去, 从入口开始执行.


Unix系的做法是fork api调用, 复制当前进程(父进程), 然后子进程里用 exec api 装载新的文件替换自己.  这带来很多灵活性, 因为子进程可以读取父进程的一切信息, (虽然也可以写, 但是写的是复制出来的那份, 不会对父进程造成影响)做各种复杂逻辑和操作. 


Unix的代价除了多一次系统级调用之外, 最大代价是内存开销(尤其当父进程很大时)  虽然现在有了 Copy on write 技术, 让父子进程共享一部分内存, 修改时才复制, 但复制的代价依然是巨大的.


综合看来,  Windows的办法是更优的.