Se você olhar para proc (5) , /proc/sys/fs/file-max "define um limite para todo o sistema no número de arquivos abertos para todos os processos". Em particular, ele não diz que um único processo pode abrir muitos arquivos.
Você pode consultar o sysconf (3) , que descreve OPEN_MAX como "O número máximo de arquivos que um processo pode abrir a qualquer momento". Você pode recuperar esse valor executando getconf OPEN_MAX .
Na verdade, não sei de improviso o tamanho que você pode fazer de OPEN_MAX , e não estou inclinado a investigar mais a esta hora, mas sinta-se à vontade para experimentar e informar-nos de volta.
Incidentalmente, eu também executaria ulimit -a para mostrar todos os limites. A execução de ulimit sozinho em bash implica em ulimit -f , que mostra apenas o tamanho máximo dos arquivos gravados pelo shell e seus filhos.
P.S. Se seu aplicativo precisar manter um milhão de arquivos abertos ao mesmo tempo, sugiro que você reavalie seu design.