Linux内核创建进程的奥秘

莱科网
预计阅读时长 3 分钟
位置: 首页 未命名 正文

写时拷贝是指父进程在创建子进程时,只创建虚拟地址空间,不为子进程分配实际的内存,父进程和子进程之间共享相同的物理内存页面。

当父进程或者子进程对虚拟地址空间对应的内存进行修改时才会分配实际内存。

Linux内核创建进程的奥秘

写时拷贝技术优点:

节省内存开销。 提高创建进程效率。

拷贝前

拷贝后

2.5 父子进程如何共享文件

FD_CLOSEXEC文件标志?

子进程和父进程共享文件是一种不安全的行为,如果子进程调用exec家族函数,子进程的虚拟机制空间被新的程序替换,如果子进程还保留父进程的文件描述符表,后果很严重。

文件设置FD_CLOSEXEC文件标志后,子进程调用exec家族函数,该文件会被关闭。

如何设置FD_CLOSEXEC文件标志?

方法1:open函数带上O_CLOSEXEC标志。

如:open(“file”, O_RDWR | O_CREAT | O_TRUNC | O_CLOSEXEC, 0644 );

方法2:fcntl函数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函数。

本文来自投稿,不代表本站立场,如若转载,请注明出处:
-- 展开阅读全文 --
头像
LinuxPrefetch缓存优化技巧
« 上一篇 2025-01-26 17:27:09
LinuxNohup日志权限设置技巧
下一篇 » 2025-01-26 17:29:05

相关文章

取消
微信二维码
支付宝二维码

热门文章

动态快讯

目录[+]