Provided by:
manpages-pl-dev_20060617-3_all 
NAZWA
getrlimit, getrusage, setrlimit - pobranie/ustawienie limitow i zuycia
zasobow
SK/LADNIA
#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
getrlimit i setrlimit odpowiednio pobieraj i ustawiaj limity zasobow.
Z kadym z zasobow stowarzyszone jest mikkie i sztywne ograniczenie
zdefiniowane w strukturze rlimit (argument rlim w getrlimit() i
setrlimit()):
struct rlimit {
rlim_t rlim_cur; /* ograniczenie mikkie */
rlim_t rlim_max; /* ograniczenie sztywne (gorna
granica dla rlim_cur) */
};
Ograniczenie mikkie jest wartoci odpowiedniego zasoby wymuszn przez
jdro. Ograniczenie sztywne dziala jak warto maksymalna dla
ograniczenia mikkiego: proces nieuprzywilejowany moe sobie ustawi
ograniczenie mikkie tylko w zakresie od 0 do ograniczenia sztywnego
oraz (nieodwracalnie) obniy swoje ograniczenie sztywne. Proces
uprzywilejowany moe dowolnie zmienia kad z wartoci ograniczenia.
Warto RLIM_INFINITY okrela brak ograniczenia dla zasobu (zarowno 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
osiga swoje ograniczenie mikkie, jest do niego wysylany sygnal
SIGXCPU. Domyln reakcj na ten sygnal jest przerwanie procesu.
Jednake, sygnal moe zosta przechwycony i procedura obslugi moe
przekaza sterowanie to programu glownego. Jeli proces nadal
bdzie zuywa zasoby procesora, bdzie do niego co sekund wysylany
sygnal SIGXCPU a do osignicia ograniczenia sztywnego, kiedy to
wysylane jest sygnal SIGKILL. (Ostatni punkt opisuje zachowanie
Linuksa 2.2 i 2.4. W zalenoci od implementacji procesy
kontynuujce zuywanie zasobow procesora po osigniciu ograniczenia
mikkiego s ronie traktowane. Aplikacje przenone, ktore maj
potrzeb przechwycenia tego sygnalu, powinny zakoczy si w sposob
kontrolowany w chwili otrzymaniu pierwszego SIGXCPU.)
RLIMIT_DATA
Maksymalny rozmiar segmentu danych procesu (dane
zainicjalizowane, dane niezainicjalizowane i sterta).
Ograniczenie to wplywa na wywolania brk() and sbrk(), ktore kocz
si niepomylnie, zglaszajc bld ENOMEM w momencie natrafienia na
mikkie ograniczenie tego zasobu.
RLIMIT_FSIZE
Maksymalny rozmiar plikow tworzonych przrz dany proces. Proba
rozszerzenia pliku ponad to ograniczenie koczy si otrzymaniem
sygnalu SIGXFSZ. Domylnie, sygnal ten koczy dzialanie procesu,
ale proces moe go przechwyci. Wowczas odpowiednia funkcja
systemowa (np. write(), truncate()) koczy si bldem. EFBIG.
RLIMIT_LOCKS
Ograniczenie lcznej liczby blokad flock() i dzieraw fcntl(),
ktore proces moe ustanowi (Linux 2.4 i poniejsze).
RLIMIT_MEMLOCK
Maksymalna liczba bajtow pamici wirtualnej, ktore mona zablokowa
w pamici RAM za pomoc mlock() i mlockall().
RLIMIT_NOFILE
Okrela warto o jeden wiksz ni maksymalna liczba deskryptorow
plikow, ktore dany proces moe otworzy. Proby wykonania (open(),
pipe(), dup(), itd.) przekraczajce t granic daj bld EMFILE.
RLIMIT_NPROC
Maksymalna liczba procesow, ktore mona utworzy dla danego
rzeczywistego identyfikatora uytkownika procesu wywolujcego. Po
napotkaniu tego ograniczenia, fork() koczy si bldem EAGAIN.
RLIMIT_RSS
Okrela ograniczenie iloci rezydentnych stron procesu (liczba
stron pamici wirtualnej pozostajcych w RAM). Ograniczenie to
dziala poczwszy od Linuksa 2.4 i dotyczy jedynie wywola
madvise() z uyciem MADVISE_WILLNEED.
RLIMIT_STACK
Maksymalny rozmiar stosu procesu w bajtach. W chwili osignicia
tego ograniczenia, generowany jest sygnal SIGSEGV. W celu
obsluenia tego sygnalu proces musi zaloy alternatywny stos dla
sygnalow (sigaltstack(2)).
RLIMIT_OFILE jest nazw BSD dla RLIMIT_NOFILE.
getrusage zwraca biece zuycie zasobow dla who bdcego albo RUSAGE_SELF
albo RUSAGE_CHILDREN. W pierwszym przypadku zwracane jest zuycie
zasobow przez biecy proces, a w dugim - przez tych sporod jego
potomkow, ktorzy zakoczyli dzialanie i na ktore to zakoczenie
oczekiwano.
struct rusage {
struct timeval ru_utime; /* uyty czas uytkownika */
struct timeval ru_stime; /* uyty czas systemowy */
long ru_maxrss; /* maximum resident set size */
long ru_ixrss; /* calkowity rozmiar pamici dzielonej */
long ru_idrss; /* calkowity rozmiar danych niedzielonych */
long ru_isrss; /* calkowity rozmiar niedzielonego stosu */
long ru_minflt; /* page reclaims */
long ru_majflt; /* page faults */
long ru_nswap; /* swapy */
long ru_inblock; /* blokowe operacje wejcia */
long ru_oublock; /* blokowe operacje wyjcia */
long ru_msgsnd; /* wyslane komunikaty */
long ru_msgrcv; /* otrzymane komunikaty */
long ru_nsignals; /* otrzymane sygnaly */
long ru_nvcsw; /* ochotnicze przelczenia kontekstu */
long ru_nivcsw; /* nieochotnicze przelczenia kontekstu */
};
WARTO ZWRACANA
Po pomylnym zakoczeniu zwracane jest 0. Po bldzie zwracane jest -1 i
odpowiednio ustawiane errno.
B/LDY
EFAULT rlim lub usage wskazuje poza dostpn przestrze adresow.
EINVAL getrlimit lub setrlimit zostalo wywolane ze zlym resource, lub
te getrusage zostalo wywolane ze zlym who.
EPERM Uytkownik nie bdcy superuytkownikiem probuje uywa setrlimit() do
zwikszenia mikich lub twardych limitow, lub te superuytkownik
probuje zwikszy RLIMIT_NOFILE powyej maksimum jdra.
ZGODNE Z
SVr4, BSD 4.3
UWAGA
Wlczenie <sys/time.h> nie jest obecnie wymagane, ale zwiksza przenono.
(Rzeczywicie, struct timeval jest zdefiniowane w <sys/time.h>.)
W Linuksie, jeli rozporzdzenie SIGCHLD ustawiono jako SIG_IGN, to
zasobow wykorzystywane przez procesy potomne s automatycznie dolczane
do wartoci zwracanej przez RUSAGE_CHILDREN, pomimo e POSIX 1003.1-2001
jawnie tego zabrania.
Powysza struktura zostala przejta 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 pielgnowane.
ZOBACZ TAKE
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/LUMACZENIU
Powysze tlumaczenie pochodzi z nieistniejcego ju Projektu Tlumaczenia
Manuali i moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji,
prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.