子プロセスで開かれたファイルは、親プロセスのファイルオープン制限に含まれていますか?

子プロセスで開かれたファイルは、親プロセスのファイルオープン制限に含まれていますか?

Mac または Linux では、ulimit -n次のコマンドを使用すると、単一プロセスのページを開く制限として表示されることを確認できます。このスタックオーバーフロー投稿

したがって、親プロセスが子プロセスを作成し、その子プロセスがファイルを開くと、そのファイルは親プロセスの開かれたファイル制限に含まれますか?

ベストアンサー1

RLIMIT_NOFILEは、一度に開くことができるファイルの数ではなく、インポートまたは割り当てできるファイル記述子の最大値に関するものです。

子プロセスはこの制限を継承しますが、それ以外は子プロセスが親プロセスに影響を与える可能性がある操作を実行できません。親エントリが0->limit-1の範囲にいくつかの利用可能なfdを持っている場合、その子が何をしても新しいファイルを開くことができます(該当する制限が適用されます)(他のグローバル制限に達する可能性があります)。

とにかく、制限が500で制限を下げる前に一部のファイル記述子が開いている場合(親プロセスを含む)、まだ500を超えるファイル記述子を開くことができます。

$ bash -c 'exec  1023> /dev/null; ulimit -n 500;
   command exec 600> /dev/null; ls -l /proc/self/fd; exit'
bash: 600: Bad file descriptor
total 0
lrwx------ 1 chazelas chazelas 64 Jun 17 08:40 0 -> /dev/pts/1
lrwx------ 1 chazelas chazelas 64 Jun 17 08:40 1 -> /dev/pts/1
l-wx------ 1 chazelas chazelas 64 Jun 17 08:40 1023 -> /dev/null
lrwx------ 1 chazelas chazelas 64 Jun 17 08:40 2 -> /dev/pts/1
l-wx------ 1 chazelas chazelas 64 Jun 17 08:40 3 -> /dev/null
lr-x------ 1 chazelas chazelas 64 Jun 17 08:40 4 -> /proc/8034/fd

プロセスは、ls親プロセスから継承された500の制限で実行されます。新しいfdは499より大きい)しかし、fd 1023はまだ開いています。

おすすめ記事