lsof
とls /proc/*/fd
については知っていますが、どれもアトミックなAFAIKではありません。後者の場合、私はユーザーのすべてのPIDを取得し、それらでフィルター処理する必要があるため、そのときまでにファイル記述子の一部を閉じることができます。
ユーザーの上限を超えた場合にFDの作成を拒否するため、OSは明らかにその番号を追跡するため、システムコールが発生する可能性があります。
徹底的な検索は行っていませんが、探しているものがLinuxに存在するとは思いません。ファイル記述子を開くと、グローバルロックは必要なく、プロセスごとのロックのみが必要です。したがって、マルチコアマシンでは、開いているファイル記述子の数をカウントするために使用するものはすべて、他のスレッドと同時に文字通り実行できます。他のコアでファイルを開いたり閉じたりします。
Linuxには、開いているファイルの総数にグローバルな制限はありません。ユーザーごとの明示的な制限もありません。 processesにはユーザーごとの制限があり、ファイル記述子番号にはプロセスごとの制限があります。これは間接的にユーザーごとのオープンファイルに制限を課しますが、明示的に追跡されません。
探索する/proc
(これはlsof
が内部で行うことです)はそれが得るのと同じくらい良いです。 /proc
は、プロセスに関する情報を取得するためのLinux APIです。