ulimit: różnica między twardymi i miękkimi limitami

87

Jaka jest różnica między twardymi i miękkimi limitami w ulimit?

Dla liczby otwartych plików mam miękki limit 1024 i twardy limit 10240. Możliwe jest uruchamianie programów otwierających więcej niż 1024 pliki. Jaki jest limit miękki?

Daniel Kullmann
źródło
4
Ty mówisz ulimit -n? Spróbuj uruchomić powłokę o bardzo niskiej wartości ( bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c'). Jaka jest wydajność?
Gilles,

Odpowiedzi:

77

Twardy limit może zostać podniesiony tylko przez root (dowolny proces może go obniżyć). Jest to więc przydatne dla bezpieczeństwa: proces inny niż root nie może przekroczyć twardego limitu. Ale niewygodne jest to, że proces inny niż root nie może mieć niższego limitu niż jego potomne.

Limit miękki może być zmieniony przez proces w dowolnym momencie. Jest to więc wygodne, o ile procesy współpracują, ale nie ma wpływu na bezpieczeństwo.

Typowym przypadkiem użycia limitów miękkich jest wyłączenie zrzutów pamięci ( ulimit -Sc 0) przy jednoczesnym zachowaniu opcji włączenia ich dla określonego procesu, który debugujesz ( (ulimit -Sc unlimited; myprocess)).

Polecenie ulimitpowłoki jest otoczką setrlimitwywołania systemowego, więc tam znajdziesz ostateczną dokumentację.

Pamiętaj, że niektóre systemy mogą nie implementować wszystkich limitów. W szczególności niektóre systemy nie obsługują limitów deskryptorów plików na proces (Linux ma); jeśli twoje nie, polecenie powłoki może nie działać.

Gilles
źródło
6
+1 dla przypadku użycia miękkich limitów. Limit rozmiaru zestawu rezydentnego ( ulimit -m, RLIMIT_RSS) jest przykładem limitu, który nie działa już w systemie Linux. Jednak limit pamięci wirtualnej ( ulimit -v, RLIMIT_AS) działa.
Adam Zalcman,
@Gilles, masz na myśli bez ponownego uruchamiania procesu, kiedy zmienimy miękki limit, może on zostać natychmiast zastosowany?
Ryan
1
@ Ryan Tak, program może w dowolnym momencie zmienić swój miękki limit, wywołując setrlimit(w zakresie dozwolonym przez twardy limit, chyba że działa jako root). Większość programów nie ma polecenia, które pozwala użytkownikowi to zrobić, ale możesz spróbować dołączyć się do programu za pomocą debugera i sprawić, że wyda setrlimitwywołanie, lub w Linuksie możesz zadzwonić prlimit(dla którego nie znam żadnej powłoki użyteczność).
Gilles
1
Teraz jest prlimitteż narzędzie powłoki.
telcoM
0

Twardy limit służy celom bezpieczeństwa. W przypadku użytkownika innego niż root może on jedynie zmniejszyć twardy limit z obecnie ustawionego twardego limitu; nie może tego zwiększyć. Zwiększenie twardego limitu może być wykonane tylko przez użytkownika root (a może z uprawnieniami sudo, nie jestem pewien). Użytkownik inny niż root może wybrać limit (zwany miękkim limitem), który może zawierać się w przedziale [0, twardy limit] dla swoich procesów. Jest to miękki limit, który jest widziany i brany pod uwagę przez procesy.

Ankit Shubham
źródło