前言:
系统调用system call是OS提供的服务提供接口。系统调用fork()、vfork()、exec()和clone()都用于创建和操作进程。Linux下Qt编程也会用到vfork进行多进程间通信。让我们看一下以下每个系统调用的概述和比较:
fork()、vfork()和clone()的工作原理相似,但在处理数据的方式上略有不同。
vfork()系统调用被认为是过时的,最好使用fork()系统调用,特别是因为它具有写时复制功能。
fork
进程执行fork()系统调用以创建新的子进程。
执行fork()调用的进程被称为父进程。创建的子进程接收唯一的进程标识符(PID),但保留父进程的PID作为其父进程标识符(PPID)。子进程与其父进程具有相同的数据。但是,这两个进程都有单独的地址空间。创建子进程后,父进程和子进程同时执行。它们在fork()系统调用之后执行下一个步骤。由于父进程和子进程具有不同的地址空间,对一个进程所做的任何修改都不会反映在另一个进程上。后来的改进引入了写时复制机制,允许父进程和子进程共享相同的地址空间。这消除了将数据复制到子进程的需要。如果任何进程修改共享地址空间中的页面,系统会分配一个新的地址空间&