fork 创建子进程,OS做了什么
fork之后多了一个子进程,但是是怎么做到的呢?
进程 = 内核数据结构 + 进程的代码和数据
fork之后多了一个子进程,但是是怎么做到的呢?
进程 = 内核数据结构 + 进程的代码和数据
关注以下回答部分来自GPT,可以看一下是否解决了你的困惑:
在操作系统中,fork 是一个创建子进程的系统调用。当执行 fork 时,操作系统会做以下几个步骤:
复制父进程:操作系统会复制父进程的内存空间、代码和数据。这包括进程的代码段、数据段、堆和栈等。
设置进程标识符:操作系统为子进程分配一个唯一的进程标识符(PID),用于在操作系统中标识和管理该进程。
设置父子关系:子进程的父进程会被设置为调用 fork 的进程(即父进程)。这样可以建立起父子进程之间的关系。
返回值:对于父进程,fork 调用返回子进程的 PID;对于子进程,fork 调用返回 0。这样可以让父子进程在执行后续操作时有不同的逻辑分支。
通过上述步骤,操作系统成功地创建了一个完全独立的子进程。子进程与父进程共享相同的代码和数据,但是它们有各自独立的内存空间和资源。
接下来,父子进程可以并行地执行各自的代码。它们通过操作系统提供的进程调度机制在操作系统内核中进行切换,以便让每个进程都获得适量的执行时间。
需要注意的是,fork 仅创建了一个子进程的初始副本。子进程之后可以通过调用 exec 系统调用来加载新的程序代码和数据,从而替换它自己的内存空间。这样,子进程就可以执行其他的程序了。