Diferença entre ulimit -n e / proc / $ PID / limits

6

No Linux, há limite de arquivos abertos. Eu posso usar ulimit -n para ver o limite de arquivo aberto, que é 1024 padrão. Então eu também posso ver o limite de soft / hard de arquivos abertos por processo, observando / proc / $ PID / limits. Eu vejo soft = 1024 e hard = 4096.

Eu estou querendo saber qual é a diferença entre essas duas saídas?

Além disso, setRlimit() e getRlimit() aplicam-se a todo o sistema ou por processo?

    
por sdeLevelNegativeTwo 08.03.2014 / 06:31

1 resposta

9

ulimit -n define o limite flexível por padrão; você pode adicionar a opção -H para visualizar / definir o limite máximo.

Na maior parte, os limites suaves e rígidos se comportam assim:

    Os processos do
  1. root (na verdade, qualquer processo com CAP_SYS_RESOURCE ) podem aumentar ou diminuir qualquer limite em qualquer processo.
  2. os processos de qualquer usuário podem reduzir qualquer limite em outros processos pertencentes a esse usuário.
  3. os processos de qualquer usuário podem aumentar o limite flexível até o limite rígido dos processos pertencentes a esse usuário.
  4. Se um processo tentar exceder seu limite flexível, a tentativa falhará.

Assim, os hard limits funcionam como um limite para os soft limits (exceto para root, que normalmente pode fazer qualquer coisa).

Existe uma exceção: um limite de CPU suave envia um sinal SIGXCPU . Um processo pode optar por ignorar isso, ou passar tempo fazendo limpeza, etc. Uma vez que o limite rígido da CPU é ultrapassado, o kernel envia SIGKILL - que não é passível de captura, manipulável ou ignorável. Portanto, neste caso, o limite suave funciona como um aviso "você está sem tempo de CPU - termine e saia rapidamente, ou então!" e o limite rígido é o "ou então".

A maioria é por processo, mas alguns (como RLIMIT_NPROC ) são por usuário. A página de manual getrlimit (2) especifica cada limite.

    
por 08.03.2014 / 07:24

Tags