在Unix中,每当我们想要创建一个新进程时,我们会fork当前进程,创建一个与父进程完全相同的新子进程;然后我们执行 exec 系统调用以将来自父进程的所有数据替换为新进程的所有数据。
为什么我们首先创建父进程的副本而不是直接创建新进程?
在基于 Unix 的系统上部署服务时,从系统管理员的角度来看有哪些实际差异?
我没有太多经验,只是试图参与他们如何从用户级别解释到硬件的过程。
因此,当从 shell 触发命令时,fork()继承它exec()的子进程并将子进程加载到内存中并执行。
fork和exec概念是否适用于 UNIX 中的所有可执行程序?也喜欢shell脚本还是只喜欢命令?它是否也适用于 shell 内置命令?很抱歉一次问了很多问题,但是当我想到任何命令执行时,所有这些问题都会立刻浮现在我的脑海中。
当我们对当前进程进行 fork 时,我们作为父进程的进程会生成具有相同特征但进程 ID 不同的子进程。所以在那之后,当我们在我们的子进程中执行 exec() 时,进程停止执行,并且我们在停止的子进程中执行的程序现在有了自己的进程。
这与我们运行应用程序时每个应用程序都有自己的进程和 PID 时不一样吗?