一、进程管理相关的系统调用
讨论 fork 和 exec 函数族(用来用指定的程序替换当前进程的所有内容)系统调用的实现。通常这些调用不是由应用程序直接发出
的,而是通过一个中间层调用,即负责与内核通信的C标准库。
从用户状态切换到核心态的方法,依不同的体系结构而各有不同。用于在这两种状态之间切换的机制,并解释了用户空间和内核空间之间如何交换参数。就目前而言,将内核视为由C标准库使用的“程序库”即可。
1、进程复制
传统UNIX中用于复制进程的系统调用是fork。但fork并不是Linux为此实现的唯一调用,实际上Linux实现了3个。
(1) fork 是重量级调用,因为fork建立了父进程的一个完整副本,然后作为子进程执行。为减少与该调用相关的工作量,Linux使用写时复制(copy-on-write)技术。
(2) vfork 类似于 fork ,但vfork 并不创建父进程数据的副本。相反,父子进程之间共享数据。这节省了大量CPU时间(如果一个进程操纵共享数据,则另一个会自动注意到)。
vfork 设计用于子进程形成后立即执行 exec 系统调用加载新程序的情形。在子进程退出或开始新程序之前,内核保证父进程处于堵塞状态。由于 fork 使用了写时复制技术, vfork 在速度方面不再有优势,因此应该避免使用 vfork 。
(3) clone
来源:CSDN
作者:静能生悟
链接:https://blog.csdn.net/xiezhi123456/article/details/103214243