因此,我已经使用了fork()
,我知道它的作用。作为一个初学者,我非常害怕它(但我仍然不完全理解它)。您可以在网上找到的fork()
的一般说明是,它复制当前进程并分配不同的PID,父PID,并且该进程将具有不同的地址空间。但是,所有这些都是好的,但是,考虑到这个功能描述,初学者会想“为什么这个功能如此重要......我为什么要复制我的过程?”。所以我很想知道,最终我发现,您可以通过execve()
家族从当前流程中调用其他流程。为什么fork()以这种方式工作
我仍然不明白的是为什么你必须这样做?最顺理成章的事情是有,你可以调用像
create_process("executable_path+name",params..., more params);
这将产生新的进程,并开始在主开始运行它(),并返回新的PID功能。
让我感到困惑的是fork/execve解决方案正在进行可能不需要的工作。如果我的流程使用大量内存会怎么样?内核是否复制我的页面表等。我相信它没有真正分配真实的内存,除非我已经触及它。另外,如果我有线程会发生什么?在我看来,这太乱了。
几乎所有fork的描述都说它只是复制进程,新进程在fork()
调用后开始运行。这确实是发生了什么,但为什么会发生这种情况,为什么fork/execve是产生新进程的唯一方法,以及从当前创建新进程的最普通unix方式是什么?有没有其他更有效的方法来产生过程?**这不需要复制更多的内存。
This同一个问题线程会谈,但我发现它不是中规中矩:
谢谢。
请在http://unix.stackexchange.com/或http://superuser.com/ – rlemon
上发帖为什么unix?这是一个编程问题,它属于堆栈溢出。 – Petr
解读http://cm.bell-labs.com/who/dmr/hist.html – ninjalj