fork 子进程不继承父进程打开的文件描述符
来源:互联网 发布:access与sql的区别 编辑:程序博客网 时间:2024/05/16 01:17
昨天面试被问到了这个问题,没有回答上来,网上找了一下答案。
解决方法是使用 clone
系统调用使用参数在复制时将父进程资源有选择地复制给子进程。
下面介绍 fork
vfork
clone
三者的区别
vfork
vfork系统调用不同于fork,用vfork创建的子进程与父进程共享地址空间,也就是说子进程完全运行在父进程的地址空间上,如果这时子进程修改了某个变量,这将影响到父进程。
因此,上面的例子如果改用vfork()的话,那么两次打印a,b的值是相同的,所在地址也是相同的。
但此处有一点要注意的是用vfork()创建的子进程必须显示调用exit()来结束,否则子进程将不能结束,而fork()则不存在这个情况。
Vfork也是在父进程中返回子进程的进程号,在子进程中返回0。
用 vfork创建子进程后,父进程会被阻塞直到子进程调用exec(exec,将一个新的可执行文件载入到地址空间并执行之。)或exit。vfork的好处是在子进程被创建后往往仅仅是为了调用exec执行另一个程序,因为它就不会对父进程的地址空间有任何引用,所以对地址空间的复制是多余的 ,因此通过vfork共享内存可以减少不必要的开销。
clone
系统调用fork()和vfork()是无参数的,而clone()则带有参数。fork()是全部复制,vfork()是共享内存,而clone()是则可以将父进程资源有选择地复制给子进程,而没有复制的数据结构则通过指针的复制让子进程共享,具体要复制哪些资源给子进程,由参数列表中的clone_flags来决定。另外,clone()返回的是子进程的pid。
参考:http://www.51develop.net/forum.php?mod=viewthread&tid=8963
- fork 子进程不继承父进程打开的文件描述符
- Linux子进程继承父进程的文件描述符
- fork子进程时和父进程之间的文件描述符的问题
- fork()子进程与父进程之间的文件描述符问题
- fork()子进程与父进程之间的文件描述符问题
- linux fork出的子进程从父进程继承些什么不继承什么
- 子进程关闭从父进程继承来的文件描述符
- fork()子进程与父进程之间的文件描述符问题 www.educity.cn/linux/1241859.html
- fork后子进程对父进程资源的继承
- 子进程继承父进程的什么不继承什么
- 《深入理解linx内核》学习笔记3---子进程共享父进程打开的文件描述符
- 父进程和子进程关于数据和文件描述符的继承的理解
- 进程调用fork与文件描述符的共享
- fork之后父子进程的文件描述符
- 进程调用fork与文件描述符的共享(fork,dump)
- 多进程 fork之后父子进程 对文件描述符的作用
- fork之后进程的数据和文件描述符的继承
- Linux进程fork execu之数据和文件描述符的继承
- GPU 加速下的图像处理
- Android聊天页面发送图片定制(类似微信)
- json2xlsx AND xlsx2json 接口
- Apache服务器无法获取Authorization Header
- Strtus2——request、response等内置对象的获取方式
- fork 子进程不继承父进程打开的文件描述符
- Linux export --设置或显示环境变量
- Java命令行简单知识点
- Activity生命周期图
- UICollectionView-设置弹簧效果是否显示滚动条等向
- maven创建java项目和javaWeb项目
- UICollectionView-设置内容的滚动方向
- 深度优先求全排列
- Linux fdisk --列出所有分区,包括没挂载上的