Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ getrlimit(2) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ulimit(1)

brk(2)

exec(2)

fork(2)

open(2)

sigaltstack(2)

ulimit(2)

getdtablesize(3)

malloc(3C)

sysconf(3C)

lfs(5)

resource(5)

signal(5)

stropts(5)

getrlimit(2)                                                   getrlimit(2)

NAME
     getrlimit, setrlimit, getrlimit64, setrlimit64 - Einsatz der System-
     ressourcen steuern

SYNTAX
     #include <sys/resource.h>

     int getrlimit(int resource, struct rlimit *rlp);

     int setrlimit(int resource, const struct rlimit *rlp);

     int getrlimit64(int resource, struct rlimit64 *rlp);

     int setrlimit64(int resource, const struct rlimit64 *rlp);

BESCHREIBUNG
     Grenzwerte hinsichtlich des Verbrauchs verschiedener Systemressourcen
     durch einen Prozeß und alle seine Sohnprozesse können mit getrlimit()
     abgerufen und mit setrlimit() gesetzt werden.

     Jeder Aufruf von getrlimit() oder setrlimit() gibt eine bestimmte Res-
     source und einen bestimmten Grenzwert für diese Ressource an. Der
     Grenzwert wird durch eine rlimit-Struktur dargestellt. Die Komponente
     rlimcur gibt den aktuellen (oder "weichen") Grenzwert an und die Kom-
     ponente rlimmax den maximalen (oder "harten") Grenzwert. Weiche
     Grenzwerte können von einem Prozeß auf einen Wert gesetzt werden, der
     kleiner oder gleich dem harten Grenzwert ist. Ein Prozeß kann seinen
     harten Grenzwert auf einen Wert größer oder gleich dem weichen Grenz-
     wert verringern (dies läßt sich allerdings nicht mehr rückkgängig
     machen). Nur ein Prozeß mit entsprechender Berechtigung kann einen
     harten Grenzwert erhöhen. Sowohl harter als auch weicher Grenzwert
     können durch einen einzigen Aufruf von setrlimit() unter Berücksichti-
     gung der oben beschriebenen Einschränkungen verändert werden.

     Der in <sys/resource.h> definierte Wert RLIMINFINITY ist größer als
     jeder andere Grenzwert. Wenn ein Aufruf getrlimit() den Wert
     RLIMINFINITY für eine Systemressource zurückgibt, bedeutet dies, daß
     die Implementierung keine Grenzwerte für diese Ressource erzwingt.
     Wird RLIMINFINITY in einem erfolgreichen Aufruf von setrlimit() als
     Grenzwert einer Systemressource angegeben, wird die Anwendung dieses
     Grenzwerts unterdrückt.

     Kann bei Verwendung der Funktion getrlimit() ein Ressourcengrenzwert
     in einem Objekt des Typs rlimt korrekt dargestellt werden, so wird
     diese Darstellung zurückgeliefert. Wenn jedoch der Wert der Ressour-
     cengrenze dem Wert des zugehörigen gesicherten harten Grenzwerts (hard
     limit) entspricht, ist der zurückgelieferte Wert RLIMSAVEDMAX.
     Ansonsten wird der Wert RLIMSAVEDCUR zurückgeliefert.







Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

getrlimit(2)                                                   getrlimit(2)

     Lautet bei Verwendung der Funktion setrlimit() der angeforderte neue
     Grenzwert RLIMINFINITY, so ist der neue Grenzwert "no limit" (also
     kein Grenzwert); wenn der angeforderte Grenzwert RLIMSAVEDMAX lau-
     tet, entspricht der neue Grenzwert dem zugehörigen gesicherten harten
     Grenzwert (hard limit). Wenn der angeforderte neue Grenzwert
     RLIMSAVEDCUR lautet, entspricht der neue Grenzwert dem zugehörigen
     gesicherten weichen Grenzwert (soft limit). Ansonsten entspricht der
     neue Grenzwert dem angeforderten Wert. Außerdem wird der entsprechende
     gesicherte Grenzwert, wenn er in einem Objekt des Typs rlimt korrekt
     dargestellt werden kann, durch den neuen Grenzwert überschrieben.

     Wenn ein Grenzwert auf RLIMSAVEDMAX oder RLIMSAVEDCUR gesetzt
     wird, ist das Ergebnis unbestimmt, es sei denn, ein vorheriger Aufruf
     von getrlimit() hat diesen Wert als weichen oder harten Grenzwert für
     den entsprechenden Ressourcengrenzwert zurückgegeben.

     Ob ein Grenzwert in einem Objekt des Typs rlimt korrekt dargestellt
     werden kann, hängt von der jeweiligen Implementierung ab. So lassen
     zum Beispiel einige Implementierungen einen Grenzwert zu, der höher
     als RLIMINFINITY ist, andere dagegen nicht.

     Bei der Gruppe der exec-Funktionen werden Ressourcengrenzwerte außer-
     dem gesichert [siehe exec(2)].

     Es besteht kein funktionaler Unterschied zwischen
     getrlimit()/setrlimit() und getrlimit64()/setrlimit64(), außer bei der
     Interpretation von rlimit/rlimit64 [siehe resource(5)].

     Die folgenden Ressourcen sind definiert:

     RLIMITCORE     Die maximale Größe einer Speicherabzugsdatei (in
                     Bytes), die von einem Prozeß erstellt werden kann. Bei
                     einem Grenzwert von 0 wird die Erstellung einer Spei-
                     cherabzugsdatei verhindert. Das Schreiben der Datei
                     wird beendet, sobald dieser Grenzwert überschritten
                     wird.

     RLIMITCPU      Die vom Prozeß verwendete maximale CPU-Zeit in Sekun-
                     den. Wenn dieser Grenzwert überschritten wird, wird
                     für den Prozeß ein SIGXCPU-Signal ausgegeben. Wird das
                     SIGXCPU-Signal vom Prozeß blockiert, abgefangen oder
                     ignoriert, ist das Verhalten unbestimmt.

     RLIMITDATA     Die maximale Größe für Datensegmente des Prozesses in
                     Bytes. Wird dieser Grenzwert überschritten, schlagen
                     die Funktionen brk(), malloc() und sbrk() fehl, und
                     errno wird auf ENOMEM gesetzt.







Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

getrlimit(2)                                                   getrlimit(2)

     RLIMITFSIZE    Die maximale Größe einer Datei (in Bytes), die von
                     einem Prozeß erstellt werden kann. Bei einem Grenzwert
                     von 0 wird die Erstellung einer Datei verhindet. Wenn
                     dieser Grenzwert durch einen Schreibvorgang oder durch
                     Abschneiden überschritten würde, wird ein SIGXFSZ-Sig-
                     nal für den Prozeß erzeugt. Wird das SIGXFSZ-Signal
                     vom Prozeß blockiert, abgefangen oder ignoriert,
                     schlagen weitere Versuche, die Datei über das Datei-
                     ende und diesen Grenzwert hinaus zu vergrößern, fehl,
                     und errno wird auf EFBIG gesetzt.

     RLIMITNOFILE   Eine Nummer, die um eins größer als der Maximalwert
                     ist, die das System einem neuerstellten Deskriptor
                     zuordnen kann. Wird dieser Grenzwert überschritten,
                     können Funktionen, die neue Dateideskriptoren zuord-
                     nen, fehlschlagen, wobei errno auf EMFILE gesetzt
                     wird. Über diesen Grenzwert wird die Anzahl der Datei-
                     deskriptoren eingeschränkt, die von einem Prozeß
                     zugeordnet werden können.

     RLIMITSTACK    Die maximale Größe für den Stack eines Prozesses in
                     Bytes. Die Implementierung vergrößert den Stack nicht
                     automatisch über diesen Grenzwert hinaus. Wird der
                     Grenzwert überschritten, wird ein SIGSEGV-Signal für
                     den Prozeß erzeugt. Wenn der Prozeß das SIGSEGV-Signal
                     blockiert, ignoriert oder abfängt, und keine Vorkeh-
                     rungen zur Verwendung eines anderen Stacks getroffen
                     wurden, wird die Voreinstellung des Signals SIGSEGV
                     vor seiner Erzeugung auf SIGDFL gesetzt.

     RLIMITAS oder RLIMITVMEM
                     Die maximale Speichergröße in Bytes, die für einen
                     Prozeß insgesamt verfügbar ist. Wird dieser Grenzwert
                     überschritten, schlagen die Funktionen brk(),
                     malloc(), mmap() und sbrk() fehl, und errno wird auf
                     ENOMEM gesetzt. Außerdem schlägt das automatische
                     Anwachsen des Stacks mit den oben beschriebenen Aus-
                     wirkungen fehl.

     Da Grenzwertinformationen auf Prozeßbasis verwaltet werden, muß die
     Shell-Anweisung ulimit(1) diesen Systemaufruf direkt ausführen, damit
     sich die Funktion auch auf alle zukünftigen von der Shell erzeugten
     Prozesse auswirkt.

RÜCKGABEWERT
     Bei erfolgreicher Ausführung geben getrlimit() und setrlimit() den
     Wert 0 zurück. Andernfalls wird -1 zurückgegeben und errno zur Anzeige
     des Fehlers gesetzt.






Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

getrlimit(2)                                                   getrlimit(2)

FEHLER
     Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
     Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
     errno(5).

     Unter den folgenden Bedingungen schlagen die Funktionen getrlimit()
     und setrlimit() fehl und setzen errno auf den jeweils angegeben Wert:

     EINVAL    Eine ungültige resource wurde angegeben, oder in einem
               setrlimit()-Aufruf überschreitet der neue rlimcur-Wert den
               neuen rlimmax Wert.

     EPERM     Durch den für setrlimit() angegebenen Grenzwert würde der
               maximale Grenzwert erhöht, der aufrufende Prozeß verfügt
               jedoch nicht über die entsprechende Berechtigung hierzu.

     Die Funktion setrlimit() kann bei folgender Bedingung fehlschlagen:

     EINVAL    Der angegebene Grenzwert kann nicht herabgesetzt werden, da
               die aktuelle Auslastung bereits über dem Grenzwert liegt.

HINWEISE
     Wenn ein Prozeß versucht, einen harten oder weichen Grenzwert für
     RLIMITNOFILE auf einen Wert unter dem in <limits.h> angegebenen Wert
     von POSIXOPENMAX zu setzen, kann dies zu unerwarteten Ergebnissen
     führen.

     Diese Funktionen bilden Grenzwerte, die sie nicht korrekt darstellen
     können auf und von RLIMSAVEDMAX und RLIMSAVEDCUR ab. Diese Werte
     müssen von Programmen nicht auf besondere Weise bearbeitet werden. Sie
     können auch als Token betrachtet werden, die der Kernel an Programme
     ausgibt, die die tatsächliche Antwort nicht verarbeiten können, und
     die den Kernel daran erinnern, welcher Wert in Wirklichkeit gemeint
     ist, wenn die Token vom Benutzer zurückkommen.

     Wenn setrlimit() aus irgendeinem Grund fehlschlägt (zum Beispiel
     EPERM), bleiben die Ressourcengrenzwerte und die gesicherten Ressour-
     cengrenzwerte unverändert.

     Nur wenige Programme (wenn überhaupt) müssen explizit auf
     RLIMSAVEDMAX oder RLIMSAVEDCUR verweisen. Programme, die auf diese
     Grenzwerte verweisen, sollten diese nicht in Switch-Case-Anweisungen
     der Sprache C verwenden, da sie in einigen Implementierungen mögli-
     cherweise denselben Wert aufweisen können.

     Ein Grenzwert, der in einem Objekt des Typs rlimt korrekt dargestellt
     werden kann, ist entweder "kein Grenzwert" (no limit), der mit
     RLIMINFINITY dargestellt wird, oder er hat einen Wert ungleich
     RLIMINFINITY, RLIMSAVEDMAX oder RLIMSAVEDCUR, kann in einem
     Objekt des Typs rlimt korrekt dargestellt werden und erfüllt alle
     zusätzlichen implementierungsspezifischen Kriterien für eine korrekte
     Darstellung.


Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

getrlimit(2)                                                   getrlimit(2)

SIEHE AUCH
     ulimit(1), brk(2), exec(2), fork(2), open(2), sigaltstack(2),
     ulimit(2), getdtablesize(3), malloc(3C), sysconf(3C), lfs(5),
     resource(5), signal(5), stropts(5).


















































Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026