in reply to perl/linux ulimit -f question

Take a look at the manpage for setrlimit (which ulimit uses to implement it's functionality). On my system this says

RLIMIT_FSIZE
The maximum size of files that the process may create. Attempts to extend a file beyond this limit result in delivery of a SIGXFSZ signal. By default, this signal terminates a process, but a process can catch this signal instead, in which case the relevant system call (e.g., write(), truncate()) fails with the error EFBIG.

So in order to prevent your program from terminating you need to catch the SIGXFSZ signal, either by setting local $SIG{XFSZ}=IGNORE or by doing something more fancy, aka

local $SIG{XFSZ}=sub { print STDERR "Caught SIGXFSZ" };
(BTW, jmcnamara's suggestion is a very good one and will also give you more realistic results than using ulimit, because ulimit will fail your process with an EFBIG error, whereas /dev/full returns ENOSPC, just as a full filesystem would).

All dogma is stupid.

Replies are listed 'Best First'.
Re^2: perl/linux ulimit -f question
by egunnar (Sexton) on Apr 03, 2006 at 18:07 UTC
    thank you all for your help. i'm glad i'm now aware of /dev/full (it worked perfect for my testing). it seems like a good thing to be aware of for the future. regards, erik