in reply to Re^3: Ulimit makes program hang (bug?)
in thread Ulimit makes program hang

I don't think it's on the system level, but it's perl that retries. I don't know exactly which functions Perl executes on backticks, but it's probably going to open some pipe. And here's a snippet from the function Perl_my_popen in util.c:
while ((pid = PerlProc_fork()) < 0) { if (errno != EAGAIN) { PerlLIO_close(p[This]); PerlLIO_close(p[that]); if (did_pipes) { PerlLIO_close(pp[0]); PerlLIO_close(pp[1]); } if (!doexec) Perl_croak(aTHX_ "Can't fork"); return NULL; } sleep(5); }
As you can see, if the fork fails with an EAGAIN, perl sleeps for 5 seconds and tries again.

A similar loop is found in Perl_my_popen_list in the same file.

Replies are listed 'Best First'.
Re^5: Ulimit makes program hang (bug?)
by memo2005 (Initiate) on Aug 14, 2008 at 08:19 UTC
    I also think this is perl who retries to fork. I think perl should return control back to user saying "Hey! I wasn't able to fork now -- you decide what to do next...".

    If admin set ulimit to prevent users from wasting system resources, then perl should fail if restrictions are broken. Perl should not wait until administrator makes limits bigger.

    --
    memo2005
    http://tornado.99k.org/telekinetics.htm