Rechercher une page de manuel
getrlimit
Langue: pl
Version: 2002-07-09 (openSuse - 09/10/07)
Section: 2 (Appels système)
NAZWA
getrlimit, getrusage, setrlimit - pobranie/ustawienie limitów i zu¿ycia zasobówSK£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
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.3UWAGA
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)Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre