fork() 和 exec() 混淆

fork() 和 exec() 混淆

当我们对当前进程进行 fork 时,我们的进程作为父进程会生成具有相同特征但不同进程 ID 的子进程。因此,之后,当我们在子进程中执行 exec() 时,进程会停止执行,而在停止的子进程中执行的程序现在拥有自己的进程。

这不是和我们运行应用程序时一样吗,特别是之后每个应用程序都有自己的进程和PID?

答案1

是的,因为这就是 UNIX 中的工作方式。

没有“运行应用程序”系统调用;它总是由 fork/exec 对完成。

顺便说一下,exec确实不是生成新的PID。exec 取代进程的内容——内存被丢弃,并加载一个全新的可执行文件——但内核状态保持不变(打开的文件、环境变量、工作目录、用户等),并且 PID 保持不变。


如果您有兴趣,请进一步阅读:

  • vfork就像fork除了它必须始终与 , 配对,并且在无法工作exec时很有用,例如在 ucLinux 中。fork

  • clone是新的fork(今天的fork函数clone在幕后使用),但做了更多的事情,包括创建新的进程分享相同的内存(而不是重复它,比如fork),我们称之为线程。

相关内容