首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么打开的文件描述符没有被重用,而是它们的数值在增加。

为什么打开的文件描述符没有被重用,而是它们的数值在增加。
EN

Stack Overflow用户
提问于 2021-10-11 05:12:51
回答 1查看 479关注 0票数 2

我有一个简单的C HTTP服务器。我关闭了accept(...)返回的磁盘文件和新连接accept(...)的文件描述符,但我注意到我得到的新文件描述符号比前面的数字要大:例如,接收返回中的文件描述符从4开始,然后再从5开始,然后再以4开始,等等,直到文件描述符达到系统上最大的打开文件描述符。

我已经在我的系统上将这个值设置为10,000,但是我不知道为什么文件描述符号会跳到最大值。我很确定我的程序会关闭文件描述符。

因此,我想知道,如果没有数千个连接,那么为什么文件描述符新的数量会周期性地增加:在大约24小时内,我得到了消息accept: too many open files。这是什么信息?

另外,ulimit -n number值是否在不重新启动的情况下自动重置?

正如答案中提到的。_2$ ps aux | grep lh的输出是

代码语言:javascript
复制
dr-x------ 2 fawad fawad  0 Oct 11 11:15 .
dr-xr-xr-x 9 fawad fawad  0 Oct 11 11:15 ..
lrwx------ 1 fawad fawad 64 Oct 11 11:15 0 -> /dev/pts/3
lrwx------ 1 fawad fawad 64 Oct 11 11:15 1 -> /dev/pts/3
lrwx------ 1 fawad fawad 64 Oct 11 11:15 2 -> /dev/pts/3
lrwx------ 1 fawad fawad 64 Oct 11 11:25 255 -> /dev/pts/3

ls -la /proc/$$/fd的输出是

代码语言:javascript
复制
root       49855  0.5  5.4 4930756 322328 ?      Sl   Oct09  15:58 /usr/share/atom/atom --executed-from=/home/fawad/Desktop/C++-work/lhparse --pid=49844 --no-sandbox
root       80901  0.0  0.0  25360  5952 pts/4    S+   09:32   0:00 sudo ./lh
root       80902  0.0  0.0 1100852 2812 pts/4    S+   09:32   0:00 ./lh
fawad      83419  0.0  0.0  19976   916 pts/3    S+   11:27   0:00 grep --color=auto lh

我想知道什么是pts/4等栏目。这是文件描述符号吗。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-11 05:31:47

文件描述符表示的套接字很可能处于close_wait或time_wait状态。这意味着TCP堆栈使fd打开的时间更长一些。所以在这种情况下不能立即重用它。

一旦套接字完全完成并关闭,文件描述符号就可以在程序中重用。

请参阅:https://en.m.wikipedia.org/wiki/Transmission_Control_Protocol

议定书操作,特别是等待状态。

要查看哪些文件仍处于打开状态,可以运行

代码语言:javascript
复制
ls -la /proc/$$/fd

这方面的产出也将有所帮助。

代码语言:javascript
复制
ss -tan | head -5
LISTEN     0  511             *:80              *:*
SYN-RECV   0  0     192.0.2.145:80    203.0.113.5:35449
SYN-RECV   0  0     192.0.2.145:80   203.0.113.27:53599
ESTAB      0  0     192.0.2.145:80   203.0.113.27:33605
TIME-WAIT  0  0     192.0.2.145:80   203.0.113.47:50685
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69521315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档