多进程情况下文件句柄共享的问题
来源:互联网 发布:mac网站老是跳转 编辑:程序博客网 时间:2024/06/05 11:07
1 Linux中的父子进程
fork() 和 clone()系统调用可用来建立新的进程。这两个系统调用结束时,内核在系统的物理内存中为新的进程分配新的 task_struct 结构,同时为新进程要使用的堆栈分配物理页。Linux 还会为新的进程分配新的进程标识符。然后,新 task_struct 结构的地址保存在链表中,而旧进程的 task_struct 结构内容被复制到新进程的 task_struct 结构中。
在克隆进程时,Linux 允许两个进程共享相同的资源。可共享的资源包括文件、信号处理程序和虚拟内存等(通过继承)。当某个资源被共享时,该资源的引用计数值会增加 1,从而只有两个进程均终止时,内核才会释放这些资源。
2 Socket服务器简单并发框架
pid_t pid;int fdListen, fdConnect;fdListen = socket(...);bind(fdListen, ...);listen(fdListen, ...);for (...;...;...){ fdConnect = accept(fdListen, ...); if ((pid = fork()) == 0) { //子进程 //重要!关闭共享的文件描述符,使引用计数-1 close(fdListen); doSomething(); close(fdConnect); exit(0); } //父进程 //重要!关闭连接FD,使其由子进程管理,引用计数-1 close(fdConnect);}
由于子进程会共享父进程的文件,所以在上例中,子进程被创建后,父进程的监听/连接FD会与子进程共享,且引用计数加一。但这是不需要的,所以对子进程而言,需要关闭监听FD,对父进程而言,需要关闭连接FD。虽然在进程退出后,所有的文件描述符均会释放,但是在合理的时间释放这些资源可以避免FD泄漏或者系统FD资源不足等问题。
0 0
- 多进程情况下文件句柄共享的问题
- linux下文件句柄参数的调整
- Linux / Unix 下文件删除、句柄 与空间释放问题
- DOS下文件共享
- win7下文件共享
- Linux下文件共享设置
- Liunx服务器下文件的编码问题
- Windows系统下文件不能共享的解决方法
- Linux下文件共享(NFS)的简单应用
- window 局域网下文件共享的开启与关闭方法
- 进程句柄方面的问题
- 【linux】lsof命令和{Linux下文件删除、句柄与空间释放问题}
- Windows与VMware Linux下文件共享
- Linux下文件共享配置方法
- Nfs实现linux下文件共享
- linux下文件打包与远程共享
- linux下文件共享--挂载(monut)
- Linux下文件权限问题
- 线索二叉树
- Windows3d大师技巧 学习1:环境配置
- 2014.4.19.12.27_switch_8.28_java switch语句使用注意的四大细节_0.01
- NYOJ-305 表达式求值(模拟)
- 一起学习CC3200系列教程之PWM模式
- 多进程情况下文件句柄共享的问题
- Android开发之Activity的启动模式
- stuts学习(四)深入学习
- 对无界财富这样新兴的P2B平台保障资金安全的看法
- 安卓开发遇到项目无法运行提示有错误有红叉但是找不到错误定位的情况
- C语言中gets(),scanf(),getchar()的区别
- iOS-Xcode开发常用插件
- VC EDIT
- 关于从txt文件读取字符,怎么过滤空格,回车,换行符等。