Rozmiar pliku podstawowego z ulimit

12

Moje pytanie prawdopodobnie nie jest związane w szczególności z Ubuntu, ale ponieważ mój komputer z tym systemem operacyjnym przyszedł na to forum.

Próbuję zmienić rozmiar pliku podstawowego za pomocą ulimit -cpolecenia w następujący sposób:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7959
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Zmiana ograniczenia:

$ ulimit -c unlimited

Obserwując wynik:

$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7959
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Rzeczywiście limit został zmieniony. Jednak gdy otwieram inny terminal i sprawdzam wartość, nadal widzę wartość zerową w głównym rozmiarze pliku.

Pytania:

  1. Czy zmiany dokonywane za pomocą ulimitpolecenia wpływają tylko na bieżący proces, tj. W tym przypadku bash?
  2. Uruchamiam program z powłoki jako proces poprzedzający lub działający w tle. Czy ulimitzmiana dotyczy nowego procesu?
  3. Jak sprawić, by ta konfiguracja wpływała na wszystkie procesy użytkownika?
maximb
źródło
1
Czy szukałeś tego przed pytaniem? serverfault.com/questions/637212/increase-ulimit-on-centos
kenn

Odpowiedzi:

10

ulimit jest wbudowaną powłoką, a zatem wpływa tylko na bieżącą powłokę, a procesy uruchomione przez tę powłokę:

$ type ulimit
ulimit is a shell builtin

Od man ulimit:

The  ulimit  utility  shall  set  or report the file-size writing limit
imposed on files written by the shell and its child processes (files of
any  size  may be read). Only a process with appropriate privileges can
increase the limit.

Tak, wpływa to na procesy potomne.

Aby ustawić limity na stałe lub dla wszystkich procesów, edytuj /etc/security/limits.confi uruchom ponownie. Przykłady na stronie są dość dobre. Musisz tylko dodać coś takiego:

username - core unlimited
muru
źródło
Dzięki. Przez manpages.ubuntu.com/manpages/bionic/man1/ulimit.1posix.html , czy ulimitoprócz poleceń wbudowanych bash jest także polecenie zewnętrzne?
Tim
@Tim cytując stronę, do której prowadzisz link: „Ponieważ ulimit wpływa na bieżące środowisko wykonywania powłoki, zawsze jest dostarczane jako zwykła wbudowana powłoka”.
muru