Provided by: manpages-pl-dev_0.5-1_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/.