菏泽网站建设服务,网页按钮制作教程,wordpress .htaccess 在哪里,网站建设教程网页目录
1.Linux如何创建进程
2.fork函数原理
2.1 fork函数原型
2.2 fork函数实现原理
2.3 父子进程虚拟地址空间#xff08;mm_struct#xff09;之间的关系
2.4 写时拷贝#xff08;copy-on-write#xff09;技术
2.5 父子进程如何共享文件#xff08;files_structmm_struct之间的关系
2.4 写时拷贝copy-on-write技术
2.5 父子进程如何共享文件files_struct
3.vfork函数原理
3.1 vfork函数原型
3.2 vfork和fork函数区别 1.Linux如何创建进程
Linux创建进程都是通过父进程克隆的方式实现。 子进程刚创建成功时虚拟地址空间和父进程虚拟地址空间信息一样即代码和数据都是一样。 通过调用exec家族函数可以替换虚拟地址空间信息为新的程序的信息。 2.fork函数原理
2.1 fork函数原型
pid_t fork(void);
功能创建一个新的进程。
参数
无。
返回值
fork函数调用一次返回两次。 父进程返回子进程PID。 子进程返回0。 失败返回-1。
2.2 fork函数实现原理 2.3 父子进程虚拟地址空间mm_struct之间的关系 父子进程各自拥有自己独立的虚拟地址空间。 父子进程共享代码段只读。 采用写时拷贝copy-on-write技术创建子进程虚拟地址空间。
2.4 写时拷贝copy-on-write技术
传统fork函数缺点 复制子进程虚拟地址空间时存在大量拷贝效率很低。 子进程立马需要执行execv函数替换虚拟地址空间内容导致上一步复制子进程虚拟地址空间变得多余。
什么是写时拷贝
写时拷贝是指父进程在创建子进程时只创建虚拟地址空间不为子进程分配实际的内存父进程和子进程之间共享相同的物理内存页面。
当父进程或者子进程对虚拟地址空间对应的内存进行修改时才会分配实际内存。
写时拷贝技术优点 节省内存开销。 提高创建进程效率。
拷贝前 拷贝后 2.5 父子进程如何共享文件files_struct FD_CLOSEXEC文件标志
子进程和父进程共享文件是一种不安全的行为如果子进程调用exec家族函数子进程的虚拟机制空间被新的程序替换如果子进程还保留父进程的文件描述符表后果很严重。
文件设置FD_CLOSEXEC文件标志后子进程调用exec家族函数该文件会被关闭。
如何设置FD_CLOSEXEC文件标志 方法1open函数带上O_CLOSEXEC标志。
如open(“file”, O_RDWR | O_CREAT | O_TRUNC | O_CLOSEXEC, 0644 ); 方法2fcntl函数F_SETFD操作设置。
3.vfork函数原理
3.1 vfork函数原型
pid_t vfork(void);
功能fork函数创建一个新的子进程该子进程与父进程共享相同的地址空间。
参数
无。
返回值
vfork函数调用一次返回两次。 父进程返回子进程PID。 子进程返回0。 失败返回-1。
3.2 vfork和fork函数区别 vfork函数创建子进程和父进程共享地址空间。 使用vfork函数创建的子进程则会暂停父进程的执行直到子进程调用exec()或者_exit()函数退出或替换自己的地址空间。
不推荐使用vfork函数
vfork函数由于子进程和父进程共享地址空间vfork比传统fork函数效率高。随着写时复制技术出现这个优势已经不存在了。
vfork存在不安全的行为所以不推荐使用vfork函数。