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 .)