develooper Front page | perl.perl5.porters | Postings from September 2012

[perl #114722] [PATCH] Reap child in case where exception has been thrown

Thread Previous
Philip Boulain
September 4, 2012 18:59
[perl #114722] [PATCH] Reap child in case where exception has been thrown
Message ID:
# New Ticket Created by  Philip Boulain 
# Please include the string:  [perl #114722]
# in the subject line of all future correspondence about this issue. 
# <URL: >

This is a bug report for perl from,
generated with the help of perlbug 1.39 running under perl 5.14.2.

IPC::Open3 does not behave as documented for exec failures in the
child; in particular, if the command to be executed does not

As documented, open3 should return the child PID, which should
then die with a complaint to its error handle. It would then be
the responsibility of the calling code to reap the child, as per

In practice, open3 throws an exception, as for other errors (I
believe this was introduced by feature request #72016). This
means that the calling code cannot learn the child pid, since
open3 never returns. Hence only open3 can reap the child, but it
does not appear to do so.

There are therefore two problems:
 - exec failures leave zombies
 - the documentation for exec failures is out of date

 * open3bug - quick script to demonstrate/reproduce the problem,
              just for bug context; not for merge
 * 0001-Reap-child-in-case-where-exception-has-been-thrown.patch
            - test case and proposed fix for the issue
              (reap the child and update the documentation)

The test case failed correctly without the fix, and passes with
the fix, but please be aware that I have only been able to test
under Linux.
Site configuration information for perl 5.14.2:

Configured by Debian Project at Fri Aug 10 21:43:06 UTC 2012.

Summary of my perl5 (revision 5 version 14 subversion 2) configuration:

    osname=linux, osvers=2.6.42-26-generic,
    uname='linux allspice 2.6.42-26-generic #41-ubuntu smp thu jun 14
17:49:24 utc 2012 x86_64 x86_64 x86_64 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN
-Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr
-Dprivlib=/usr/share/perl/5.14 -Darchlib=/usr/lib/perl/5.14
-Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5
-Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local
-Dsitearch=/usr/local/lib/perl/5.14.2 -Dman1dir=/usr/share/man/man1
-Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1
-Dsiteman3dir=/usr/local/man/man3 -Duse64bitint -Dman1ext=1
-Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh
-Ud_ualarm -Uusesfio -Uusenm -Ui_libutil -DDEBUGGING=-g -Doptimize=-O2
-Duseshrplib -des'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN
-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include
    optimize='-O2 -g',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing
-pipe -fstack-protector -I/usr/local/include'
    ccversion='', gccversion='4.6.3', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t',
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
    libpth=/usr/local/lib /lib/x86_64-linux-gnu /lib/../lib
/usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib /usr/lib
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=, so=so, useshrplib=true,
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib

Locally applied patches:

@INC for perl 5.14.2:

Environment for perl 5.14.2:
    LOGDIR (unset)
    PERL_BADLANG (unset)

Dr. Philip Boulain

Smoothwall Ltd
Phone: +44 (0) 8701 999500

Smoothwall Limited is registered in England, Company Number: 4298247
and whose registered address is 1 John Charles Way, Leeds, LS12 6QA
United Kingdom
This email and any attachments transmitted with it are confidential to
the intended recipient(s) and may not be communicated to any other
person or published by any means without the permission of Smoothwall
Limited. Any opinions stated in this message are solely those of the

Thread Previous Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About