多进程情况下文件句柄共享的问题

本文探讨了Linux系统中,通过fork()和clone()创建的父子进程如何处理文件句柄共享,特别是在Socket服务器并发框架下。新进程通常会继承父进程的资源,如文件、信号和虚拟内存,导致引用计数增加。为了避免不必要的资源占用和FD泄漏,子进程需要关闭监听FD,而父进程则需关闭连接FD,确保在适当时间释放资源。
摘要由CSDN通过智能技术生成

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)
    {
        //子进程
        //重要&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值