私はシステムを監視し、定期的なログを出力する長い実行プロセスを持っています。 10-15分以上実行すると、次のメッセージが表示されて終了します。 開いているファイルが多すぎます。Linuxのファイルディスクリプタの数を増やす
プログラムは、リアルタイムtimer_create()とtimer_settime()を使用してセットアップされ、2秒ごとにSIGUSR1が発生します。ハンドラには、子プロセスにfork() - exec()が1つあります。/ proc/acpi/battery/stateおよび/ sys/devices/system/cpu/cpu0の親プロセスとそれ以降のmmap()/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
あなたは間違いなくどこかに漏れています。 – Joe
私が以下に述べたように、ファイルのストリームポインタの1つを正しく閉じることができませんでした。 fclose()が呼び出される前に戻りました。 if(freq == "1000000") return 0; else if(freq == "1333000") return 1; else if(freq == "1667000") return 2; fclose(fp); if-else文の前にfcloseを置いて修正しました。 – Dhruv