setrlimit

GETRLIMIT(2)            PodrÄcznik programisty Linuksa            GETRLIMIT(2)



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/.



Linux                             2002-07-09                      GETRLIMIT(2)