Too many open files

socket编程中遇到的这个问题,刚开始还以为是socket fd没有关闭,检查了好多遍,都有close啊。郁闷死了。

后来使用linux下的lsof命令找到问题的根源:

1.首先得到id: ps -ef | grep "process"

2.查看文件打开情况:lsof -p $pid

3.在lsof中发现最后一列Name中打开了特别多的文件,忽然想起来,应该是打开的文件没有进行fclose。

4.修改,添加fclose(fp);

 

附:lsof的参数
lsof  filename 显示打开指定文件的所有进程
lsof -a 表示两个参数都必须满足时才显示结果
lsof -c string   显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username  显示所属user进程打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -i 用以显示符合条件的进程情况
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
            46 --> IPv4 or IPv6
            protocol --> TCP or UDP
            hostname --> Internet host name
            hostaddr --> IPv4地址
            service --> /etc/service中的 service name (可以不只一个)
            port --> 端口号 (可以不只一个)

你可能感兴趣的:(linux,String,socket,service,command,internet)