ulimit -n
define o limite flexível por padrão; você pode adicionar a -H
opção de visualizar / definir o limite rígido.
Na maioria das vezes, os limites flexíveis e rígidos se comportam assim:
- Os processos da raiz (na verdade, qualquer processo com
CAP_SYS_RESOURCE
) podem aumentar ou diminuir qualquer limite em qualquer processo.
- os processos de qualquer usuário podem reduzir qualquer limite em outros processos pertencentes a esse usuário.
- os processos de qualquer usuário podem aumentar o limite flexível até o limite rígido dos processos pertencentes a esse usuário.
- Se um processo tentar exceder seu limite flexível, a tentativa falhará.
Portanto, os limites rígidos funcionam como um limite para os limites flexíveis (exceto a raiz, que normalmente pode fazer qualquer coisa).
Há uma exceção: um limite suave da CPU envia um SIGXCPU
sinal. Um processo pode optar por ignorar isso ou gastar tempo fazendo a limpeza, etc. Depois que o limite da CPU for ultrapassado, o kernel envia SIGKILL
- o que não é alcançável, manipulável ou ignorável. Portanto, nesse caso, o limite flexível funciona como um aviso "você está sem tempo de CPU - termine e saia imediatamente, ou então!" e o limite máximo é o "ou então".
A maioria é por processo, mas algumas (como RLIMIT_NPROC
) são por usuário. A página de manual getrlimit (2) especifica para cada limite.