Schrift
[thread]12917[/thread]

ulimit -a liefert keine Ausgabe

Leser: 2


<< >> 10 Einträge, 1 Seite
ingobulla
 2008-12-17 17:46
#117323 #117323
User since
2008-08-08
20 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe ein Programm, das wie folgt beginnt:

Code (perl): (dl )
1
2
3
4
5
6
7
#!/usr/bin/perl
use strict;
use POSIX;

print `ulimit -d 40`;
print `ulimit -a`;
print `pwd`;


Als Ausgabe erhalte ich
Code: (dl )
/gobics/home/ingo/workspace/HIVCoal/testing


Es kommt also keinerlei Ausgabe von ulimit -a. Weiss jemand, was hier los ist.
ich
 2008-12-17 18:02
#117324 #117324
User since
2003-09-19
120 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi ingobulla,


Code: (dl )
1
2
3
jgehring@lxjage:~$ which ulimit
jgehring@lxjage:~$ which pwd
/bin/pwd


ulimit ist kein executable das ausgefuehrt wird wie "pwd" es ist ein shell buildin.

Viele Gruesse

Jan
If you tell the truth you don't have to remember anything.
-- Mark Twain
ingobulla
 2008-12-17 18:34
#117326 #117326
User since
2008-08-08
20 Artikel
BenutzerIn
[default_avatar]
Und wie kann ich dann ulimit von perl aus ausführen?
ich
 2008-12-17 18:42
#117327 #117327
User since
2003-09-19
120 Artikel
BenutzerIn
[Homepage] [default_avatar]
Schau dir dazu mal CPAN:BSD::Resource an. Ich habe es jetzt noch nie selbst gemacht aber das sollte funktionieren.


Viele Gruesse

Jan
If you tell the truth you don't have to remember anything.
-- Mark Twain
ingobulla
 2008-12-17 18:54
#117328 #117328
User since
2008-08-08
20 Artikel
BenutzerIn
[default_avatar]
Gibt es denn keinen generell anwendbaren Workaround, um shell buildins in perl benutzen zu können?
FoolAck
 2008-12-17 19:04
#117329 #117329
User since
2008-05-02
69 Artikel
BenutzerIn
[default_avatar]
Code (perl): (dl )
print `sh -c 'ulimit -a'`

.
ich
 2008-12-17 19:29
#117331 #117331
User since
2003-09-19
120 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

der schoenere weg ist ueber das Modul. Man sollte sich nicht unbedingt darauf verlassen immer die gleiche Umgebung vorzufinden.


Viele Gruesse

Jan
If you tell the truth you don't have to remember anything.
-- Mark Twain
ingobulla
 2008-12-17 21:58
#117337 #117337
User since
2008-08-08
20 Artikel
BenutzerIn
[default_avatar]
Wenn wir schon mal bei ulimit sind: Ich würde gerne mein Programm automatisch beenden, wenn es mehr als 4 GB in Anspruch nehmen will. Das sollte - soweit ich weiss - mit ulimit funktionieren. Aber welchen Parameter genau muss ich auf 4 GB setzen (also welche Option von ulimit ist zu benutzen):

* data seg size (-d),
* max locked memory (-l),
* max memory size (-m) oder
* virtual memory (-v)?
murphy
 2008-12-18 00:35
#117341 #117341
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Tja, welchen Parameter Du setzen musst, haengt davon ab, was Du machen willst. Die Anforderung, dass ein Prozess nicht
Quote
[...] mehr als 4 GB in Anspruch nehmen [...]
soll, ist einfach nicht spezifisch genug:

- Mit ulimit -d ... bzw. setrlimit(RLIMIT_DATA, ...) beschraenkst Du die Menge an virtuellem Speicher, die von automatisch aus der ausfuehrbaren Datei geladenen Datensektionen und mittels brk / sbrk allozierten Seiten belegt werden darf. Wenn Du nicht weisst, ob der Allokator des betreffenden Prozesses ueberhaupt diese Systemaufrufe verwendet, und nicht vielleicht direkt mmap benutzt, ist das Limit je nach Betriebssystem wohl wenig sinnvoll. Wenn das Limit ueberschritten wird, bricht der Kernel den Prozess in der Regel mit einem SEGV-Signal ab.

- Mit ulimit -l ... bzw. setrlimit(RLIMIT_MEMLOCK, ...) beschraenkst Du die Menge an physikalischem Speicher, der so zugewiesen ist, dass er nicht ausgelagert werden darf. Meistens existiert hier bereits standardmaessig ein recht geringes Limit und nur wenige Programme brauchen solchen Speicher, zum Beispiel um kryptographische Schluessel abzulegen. Wenn das Limit ueberschritten wird, bricht der Kernel den Prozess in der Regel mit einem SEGV-Signal ab.

- Mit ulimit -m ... bzw. setrlimit(RLIMIT_RSS, ...) beschraenkst Du die Menge an physikalischem Speicher, der aktuell insgesamt von dem Programm belegt wird, also die Groesse aller Seiten, die dem Programm gehoeren und nicht ausgelagert sind. Je nach Betriebssystem haengt es auch hier vom Allokator ab, ob das Limit etwas bewirkt. Je nach Betriebssystem wird der Prozess auch nicht abgebrochen, wenn er dieses Limit ueberschreitet, sondern es werden einfach mehr Speicherseiten ausgelagert, was den Prozess nur langsamer macht und den Speichermanager des Kernels zusaetzlich belastet.

- Mit ulimit -v ... bzw. setrlimit(RLIMIT_AS, ...) beschraenkst Du die Menge an virtuellem Speicher, der aktuell insgesamt von dem Programm belegt wird, inklusive ausgelagerter Seiten und inklusive Bereichen, die eigentlich gar keine Daten enthalten. Dieses Limit funktioniert wohl am zuverlaessigsten auf verschiedenen Betriebssystemen aehnlich, ist aber auch am unspezifischsten. Wenn das Limit ueberschritten wird, bricht der Kernel den Prozess in der Regel mit einem SEGV-Signal ab.
When C++ is your hammer, every problem looks like your thumb.
RPerl
 2008-12-23 20:56
#117425 #117425
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Das ganze kann man auch mit man bash (suchen nach "ulimit") nachlesen.
Nur so als Tip! :)
<< >> 10 Einträge, 1 Seite



View all threads created 2008-12-17 17:46.