Unix 系统中描述符传递与线程管理技术解析
在 Unix 系统的开发中,我们常常会遇到进程间传递描述符以及线程管理的问题。下面将深入探讨描述符传递和door-server-create函数相关的技术要点。
1. 描述符传递基础
在进程间传递打开的描述符,常见的情况有两种:一是子进程在fork调用后与父进程共享所有打开的描述符;二是在执行exec时,所有描述符通常保持打开状态。
例如,一个进程先打开一个描述符,然后调用fork,接着父进程关闭该描述符,让子进程处理该描述符,这样就实现了从父进程到子进程的描述符传递。
当前的 Unix 系统扩展了描述符传递的概念,允许在任意相关或不相关的进程之间传递任何打开的描述符。“门(Doors)” 提供了一种 API,可用于在客户端和服务器之间传递描述符。
不同的内核采用不同的技术来传递描述符:
- Berkeley 派生的内核使用 Unix 域套接字传递描述符。
- SVR4 内核使用I - SENDFD和I - RECVFDioctl命令传递描述符,不过 SVR4 进程仍可通过 Unix 域套接字使用该内核特性。
2. 描述符传递的原理
要理解描述符传递的含义,我们来看一个例子。假设服务器打开一个文件,如果将整个文件通过管道复制给客户端,若文件大小为 1 兆字节,那么就会有 1 兆字节的数据通过管道从服务