我有一个长时间运行的进程来监视系统并打印定期日志。如果我让它运行超过 10-15 分钟,它会退出并显示一条消息:打开的文件太多。
该程序使用实时 timer_create() 和 timer_settime() 设置,每 2 秒引发一次 SIGUSR1。在处理程序中,子进程中有一个 fork()-exec() 父进程和后续 mmap() 以及 /proc/acpi/battery/state 和 /sys/devices/system/cpu/cpu0 上的流操作有一个等待/cpufreq/scaling_cur_freq 和 scaling_setspeed 文件。我已经注意在周期性信号处理程序和所有其他地方关闭流 FILE * 指针。我还确保了所有映射文件的 munmap() 。
我怎样才能解决这个问题?我应该增加允许的最大文件描述符还是应该增加 ulimit -aS 显示的最大打开文件数?如果我使用 fclose() 关闭所有 FILE *,为什么会发生这种情况?
以下是我的系统目前的值:
#cat /proc/sys/fs/file-max
152808
#ulimit -aS
.
.
.
.
open files (-n) 1024