Os arquivos abertos pelos processos filhos são incluídos no limite de abertura de arquivo do processo pai?

1

No Mac ou no Linux, se você usar o comando ulimit -n , poderá ver o limite de abertura da página para o que parece ser um processo individual de acordo com este post de stackoverflow .

Portanto, se um processo pai gerar processos filhos e esses processos filhos abrirem arquivos, esses arquivos serão considerados no limite de arquivos abertos do pai?

    
por hamdog 17.06.2017 / 08:54

1 resposta

4

O RLIMIT_NOFILE está no valor máximo de descritor de arquivo que você pode obter / alocar, não em quantos arquivos podem estar abertos por vez.

Os processos filhos herdam o limite, mas além disso, não há nada que uma criança possa fazer para influenciar o pai aqui. Se o pai tiver alguns fds livres no intervalo 0- > limit-1, ele ainda poderá abrir novos arquivos (wrt até esse limite), independentemente do que qualquer um de seus filhos fizer (você pode encontrar outros limites globais) embora).

Em qualquer caso, observe que se o limite for 500, você ainda poderá ter mais de 500 descritores de arquivos abertos se você tivesse alguns que estavam abertos (inclusive nos processos pai) antes de o limite ser reduzido.

$ 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

Esse processo executando ls tem um limite de 500 herdado de seu pai (portanto, não é possível obter um novo fd maior que 499). Ainda tem o fd 1023 aberto.

    
por 17.06.2017 / 09:47