Pense nos limites hard e soft como limites obrigatórios e discricionários, resp. O limite rígido é imposto pelo sistema (através de configuração adequada, por exemplo, limits.conf(5)
) e pode ser aumentado apenas pelo superusuário (ou seja, raiz), enquanto o usuário pode medir limites suaves a seu critério dentro do intervalo dos limites rígidos correspondentes.
Na página de manual getrlimits(2)
:
The soft limit is the value that the kernel enforces for the corresponding resource. The hard limit acts as a ceiling for the soft limit: an unprivileged process may set only its soft limit to a value in the range from 0 up to the hard limit, and (irreversibly) lower its hard limit.
Assim, se você atingir um limite de recurso, verifique se você pode aumentar o limite flexível de acordo; se não, então o limite rígido precisa ser aumentado.
Resposta ao comentário
Não existe apenas o limite rígido . Os limites são definidos por setrlimit(2)
, que se refere a struct rlimit
. Este, por sua vez, tem membros para limite de hardware e software ( rlim_cur
e rlim_max
, resp.). Se um limite flexível não for explicitamente definido, o padrão será algum valor; provavelmente o limite rígido de acordo, mas isso é até o processo que define os limites. ( setrlimits(2)
rejeita rlim_cur
excedendo rlim_max
, então RLIM_INFINITY
normalmente não é um padrão válido para rlim_cur
.)