On Tue, Aug 23, 2005 at 03:33:42AM -0700, Yitzchak Scott-Thoennes wrote:
> On Mon, Aug 22, 2005 at 01:29:04PM -0400, Rick Delaney wrote:
> > When $SIG{CHLD} is set to "IGNORE", wait(2) will return -1 [1]. Since
> > system returns the status as provided by wait and wait isn't providing a
> > status I think the -1 return is reasonable. Check $! when system
> > returns -1; in this case it will say "No child processes" (ECHILD).
> >
> > The patch after my .sig addresses this in perlfunc.
> >
> > [1] On Linux this is not true and wait(2) will ignore the IGNORE and
> > actually wait for the process to finish, returning the status and
> > pid. I personally don't think perl should support this behaviour.
>
> ?? But this bug report is for linux.
Sorry, I wasn't paying close enough attention. And I wasn't very
clear anyway. I meant that perl shouldn't go out of its way to
accomodate strange behaviour that is neither SysVish or BSDish. But I
didn't really think about it because, of course, perl is just
returning whatever the system call returns so it is not going out of
its way.
My footnote was paraphrased from `man 2 wait` and IMO the described
behaviour is a bug. And it must have been a bug in someone else's
opinion too since wait/waitpid do not behave like that on Linux. At
least they don't for me with kernel 2.6.8 and a C program. They behave
the SysV way (return -1 and set ECHILD when SIG_IGN). I guess the man
page is out of date.
So perl is behaving exactly like the underlying system call. Sorry
for any confusion.
--
Rick Delaney
rick@bort.ca
Thread Previous
|
Thread Next