focal (2) setrlimit.2.gz

Provided by: manpages-pl-dev_0.7-2_all bug

NAZWA

       getrlimit, getrusage, setrlimit - pobranie/ustawienie limitów i zużycia zasobów

SKŁADNIA

       #include <sys/time.h>
       #include <sys/resource.h>
       #include <unistd.h>

       int getrlimit(int resource, struct rlimit *rlim);
       int getrusage(int who, struct rusage *usage);
       int setrlimit(int resource, const struct rlimit *rlim);

OPIS

        Uwaga! To tłumaczenie może być nieaktualne!

       getrlimit i setrlimit odpowiednio pobierają i ustawiają limity zasobów.  Z każdym z zasobów stowarzyszone
       jest miękkie i sztywne ograniczenie zdefiniowane w strukturze  rlimit  (argument  rlim  w  getrlimit()  i
       setrlimit()):

            struct rlimit {
                rlim_t rlim_cur;   /* ograniczenie miękkie */
                rlim_t rlim_max;   /* ograniczenie sztywne (górna
                                      granica dla rlim_cur) */
            };

       Ograniczenie  miękkie  jest  wartością  odpowiedniego  zasoby wymuszną przez jądro.  Ograniczenie sztywne
       działa jak wartość maksymalna dla ograniczenia miękkiego: proces nieuprzywilejowany  może  sobie  ustawić
       ograniczenie  miękkie tylko w zakresie od 0 do ograniczenia sztywnego oraz (nieodwracalnie) obniżyć swoje
       ograniczenie sztywne. Proces uprzywilejowany może dowolnie zmieniać każdą z wartości ograniczenia.

       Wartość RLIM_INFINITY określa  brak  ograniczenia  dla  zasobu  (zarówno  w  strukturze  zwracanej  przez
       getrlimit(), jak i w strukturze przekazywanej do setrlimit()).

       resource musi być jednym z:

       RLIMIT_CPU
              Ograniczenie  czasu  procesora  (CPU)  w sekundach.  Gdy proces osiąga swoje ograniczenie miękkie,
              jest do niego wysyłany sygnał SIGXCPU.  Domyślną reakcją na ten sygnał  jest  przerwanie  procesu.
              Jednakże,  sygnał  może  zostać  przechwycony  i  procedura  obsługi  może przekazać sterowanie to
              programu głównego. Jeśli proces nadal będzie zużywać zasoby procesora, będzie do niego co  sekundę
              wysyłany  sygnał  SIGXCPU  aż do osiągnięcia ograniczenia sztywnego, kiedy to wysyłane jest sygnał
              SIGKILL.  (Ostatni punkt opisuje zachowanie Linuksa 2.2  i  2.4.  W  zależności  od  implementacji
              procesy  kontynuujące  zużywanie zasobów procesora po osiągnięciu ograniczenia miękkiego są różnie
              traktowane. Aplikacje przenośne, które mają potrzebę przechwycenia tego sygnału, powinny zakończyć
              się w sposób kontrolowany w chwili otrzymaniu pierwszego SIGXCPU.)

       RLIMIT_DATA
              Maksymalny  rozmiar  segmentu  danych  procesu  (dane zainicjalizowane, dane niezainicjalizowane i
              sterta).  Ograniczenie to wpływa na wywołania brk() and sbrk(),  które  kończą  się  niepomyślnie,
              zgłaszając błąd ENOMEM w momencie natrafienia na miękkie ograniczenie tego zasobu.

       RLIMIT_FSIZE
              Maksymalny  rozmiar  plików  tworzonych  przrz  dany  proces.  Próba  rozszerzenia  pliku ponad to
              ograniczenie kończy się otrzymaniem sygnału  SIGXFSZ.   Domyślnie,  sygnał  ten  kończy  działanie
              procesu,  ale  proces  może  go  przechwycić. Wówczas odpowiednia funkcja systemowa (np.  write(),
              truncate()) kończy się błędem.  EFBIG.

       RLIMIT_LOCKS
              Ograniczenie łącznej liczby blokad flock() i dzierżaw fcntl(), które proces może ustanowić  (Linux
              2.4 i późniejsze).

       RLIMIT_MEMLOCK
              Maksymalna  liczba  bajtów  pamięci  wirtualnej,  które  można  zablokować w pamięci RAM za pomocą
              mlock() i mlockall().

       RLIMIT_NOFILE
              Określa wartość o jeden większą niż maksymalna liczba deskryptorów plików, które dany proces  może
              otworzyć.  Próby  wykonania  (open(),  pipe(),  dup(),  itd.)  przekraczające tę granicę dają błąd
              EMFILE.

       RLIMIT_NPROC
              Maksymalna  liczba  procesów,  które  można  utworzyć  dla  danego  rzeczywistego   identyfikatora
              użytkownika  procesu  wywołującego.  Po  napotkaniu  tego  ograniczenia,  fork() kończy się błędem
              EAGAIN.

       RLIMIT_RSS
              Określa  ograniczenie  ilości  rezydentnych  stron  procesu  (liczba  stron   pamięci   wirtualnej
              pozostających  w  RAM).  Ograniczenie to działa począwszy od Linuksa 2.4 i dotyczy jedynie wywołań
              madvise() z użyciem MADVISE_WILLNEED.

       RLIMIT_STACK
              Maksymalny rozmiar stosu procesu w bajtach.  W chwili osiągnięcia  tego  ograniczenia,  generowany
              jest  sygnał  SIGSEGV.   W  celu obsłużenia tego sygnału proces musi założyć alternatywny stos dla
              sygnałów (sigaltstack(2)).

       RLIMIT_OFILE jest nazwą BSD dla RLIMIT_NOFILE.

       getrusage zwraca bieżące zużycie zasobów dla who  będącego  albo  RUSAGE_SELF  albo  RUSAGE_CHILDREN.   W
       pierwszym  przypadku  zwracane  jest zużycie zasobów przez bieżący proces, a w dugim - przez tych spośród
       jego potomków, którzy zakończyli działanie i na które to zakończenie oczekiwano.

            struct rusage {
                struct timeval ru_utime; /* użyty czas użytkownika */
                struct timeval ru_stime; /* użyty czas systemowy */
                long   ru_maxrss;        /* maximum resident set size */
                long   ru_ixrss;         /* całkowity rozmiar pamięci dzielonej */
                long   ru_idrss;         /* całkowity rozmiar danych niedzielonych */
                long   ru_isrss;         /* całkowity rozmiar niedzielonego stosu */
                long   ru_minflt;        /* page reclaims */
                long   ru_majflt;        /* page faults */
                long   ru_nswap;         /* swapy */
                long   ru_inblock;       /* blokowe operacje wejścia */
                long   ru_oublock;       /* blokowe operacje wyjścia */
                long   ru_msgsnd;        /* wysłane komunikaty */
                long   ru_msgrcv;        /* otrzymane komunikaty */
                long   ru_nsignals;      /* otrzymane sygnały */
                long   ru_nvcsw;         /* ochotnicze przełączenia kontekstu */
                long   ru_nivcsw;        /* nieochotnicze przełączenia kontekstu */
            };

WARTOŚĆ ZWRACANA

       Po pomyślnym zakończeniu zwracane jest 0. Po błędzie zwracane jest -1 i odpowiednio ustawiane errno.

BŁĘDY

       EFAULT rlim lub usage wskazuje poza dostępną przestrzeń adresową.

       EINVAL getrlimit lub setrlimit zostało wywołane ze złym resource, lub też getrusage zostało  wywołane  ze
              złym who.

       EPERM  Użytkownik  nie  będący  superużytkownikiem  próbuje używać setrlimit() do zwiększenia miękich lub
              twardych limitów, lub też superużytkownik próbuje zwiększyć RLIMIT_NOFILE powyżej maksimum jądra.

ZGODNE Z

       SVr4, BSD 4.3

UWAGA

       Włączenie <sys/time.h> nie jest  obecnie  wymagane,  ale  zwiększa  przenośność.   (Rzeczywiście,  struct
       timeval jest zdefiniowane w <sys/time.h>.)

       W  Linuksie, jeśli rozporządzenie SIGCHLD ustawiono jako SIG_IGN, to zasobów wykorzystywane przez procesy
       potomne są  automatycznie  dołączane  do  wartości  zwracanej  przez  RUSAGE_CHILDREN,  pomimo  że  POSIX
       1003.1-2001 jawnie tego zabrania.

       Powyższa  struktura  została  przejęta  z  BSD 4.3 Reno.  Nie wszystkie pola mają znaczenie pod Linuksem.
       Obecnie (Linux 2.4) jedynie pola ru_utime, ru_stime, ru_minflt, ru_majflt i ru_nswap są pielęgnowane.

ZOBACZ TAKŻE

       dup(2), fcntl(2), fork(2), mlock(2),  mlockall(2),  mmap(2),  open(2),  quotactl(2),  sbrk(2),  wait3(2),
       wait4(2), malloc(3), ulimit(3), signal(7)

INFORMACJE O TŁUMACZENIU

       Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne.
       W razie zauważenia różnic między powyższym opisem a rzeczywistym  zachowaniem  opisywanego  programu  lub
       funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:

              man --locale=C 2 getrlimit

       Prosimy   o   pomoc   w   aktualizacji   stron   man  -  więcej  informacji  można  znaleźć  pod  adresem
       http://sourceforge.net/projects/manpages-pl/.