Czy wartości limit.conf są stosowane dla poszczególnych procesów?

25

Dostosowuję nofilewartość /etc/security/limits.confdla mojego użytkownika Oracle i mam pytanie dotyczące jej zachowania: czy nofileogranicza całkowitą liczbę plików, które użytkownik może otworzyć dla wszystkich swoich procesów, czy też ogranicza całkowitą liczbę plików, które użytkownik może mieć otwarty na każdy ze swoich procesów?

W szczególności do następującego zastosowania:

oracle                  hard    nofile                  65536
Christopher Neylan
źródło

Odpowiedzi:

23

Większość wartości¹ limits.confjest limitami, które można ustawić za pomocą ulimitpolecenia powłoki lub setrlimitwywołania systemowego. Są właściwościami procesu. Limity obowiązują niezależnie dla każdego procesu. W szczególności każdy proces może mieć do nofileotwarcia plików. Nie ma ograniczeń co do liczby otwartych plików kumulowanych przez procesy użytkownika.

nprocGranica jest trochę szczególny przypadek, że to będzie razem przez wszystkie procesy użytkownika. Niemniej jednak nadal ma zastosowanie do poszczególnych procesów: gdy proces wywołuje forkutworzenie nowego procesu, wywołanie jest odrzucane, jeśli liczba procesów należących do euid procesu jest większa niż wartość procesu RLIMIT_NPROC.

limits.confStrona mężczyzna wyjaśnia, że limity dotyczą sesji. Oznacza to, że wszystkie procesy w sesji będą miały te same limity (chyba że zostaną zmienione przez jeden z tych procesów). Nie oznacza to, że suma jest przetwarzana na procesy w sesji (nie jest to nawet coś, co śledzi system operacyjny - istnieje pojęcie sesji, ale jest ono bardziej szczegółowe, na przykład każda aplikacja X11 ma tendencję do kończenia we własnej sesji). Działa to tak, że proces logowania sam się określa pewne ograniczenia i są one dziedziczone przez wszystkie procesy potomne.

Đ Wyjątkiem są maxlogins, maxsysloginsi chroot, który stosuje się jako część procesu logowania się do odrzucenia lub wpływ logowania.

Gilles „SO- przestań być zły”
źródło
I odwrotnie, czy to oznacza, że ​​różne sesje mogą mieć różne zestawy limitów?
CMCDragonkai
1
@CMCDragonkai Tak, na przykład jeśli zostanie limit.confzmieniony między godzinami otwarcia sesji lub jeśli zostaną ustawione inne limity (będą musiały być mniejsze z wyjątkiem roota) .profile.
Gilles „SO- przestań być zły”
1
@laimison Jeśli wykonasz iterację we wszystkich uruchomionych procesach i uruchomisz prlimit --pid $pidkażdy z nich, możesz skutecznie zmienić limit aktywnej sesji. Pamiętaj, że możesz to zrobić kilka razy, jeśli niektóre procesy zostaną rozwidlone podczas iteracji.
Gilles „SO- przestań być zły”
1
@ oświadczenie Nie. Załóżmy, że użytkownik ma tylko dwa procesy A i B, z RLIMIT_NPROCustawionymi na 2 w A i 3 w B. Następnie B może rozwidlić jeszcze jeden proces, ale A nie.
Gilles „SO- przestań być zły”
1
@laimison Jeśli ustawisz limit na 2 u rodzica B i nie zmienisz go w B po rozwidleniu, wówczas limit B wyniesie 2. Jeśli ustawisz limit na 2 u rodzica B, ale podniesiesz limit w B, lub jeśli ustawiasz limit na 3 u rodzica B przed rozwidleniem B i ustawiasz go na 2 po rozwidleniu B, B będzie miał ustawiony limit na 3. Jedyny ważny limit to ten w procesie, który wywołuje fork (), a nie limit w tym procesie macierzystym lub w innym procesie.
Gilles „SO- przestań być zły”