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

[perl #113028] [PATCH] Full example of REAPER in perlipc

Thread Next
From:
Alexey Shrub
Date:
May 21, 2012 16:36
Subject:
[perl #113028] [PATCH] Full example of REAPER in perlipc
Message ID:
rt-3.6.HEAD-4610-1337632410-1513.113028-75-0@perl.org
# New Ticket Created by  Alexey Shrub 
# Please include the string:  [perl #113028]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=113028 >


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

 From d8632592e47bbd5b8e879732d9c5c288536fd169 Mon Sep 17 00:00:00 2001
From: Alexey Shrub <worldmind@mail.ru>
Date: Mon, 21 May 2012 23:06:35 +0300
Subject: [PATCH] Full example of REAPER in perlipc - we need loop for 
process
  all signals (if some children exit in same time) and we
  need check reason of signal (no need process STOP signal
  see part 16.19. Avoiding Zombie Processes in "Perl
  Cookbook")

---
  pod/perlipc.pod |   14 ++++++++------
  1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/pod/perlipc.pod b/pod/perlipc.pod
index 7650838..9b62a0f 100644
--- a/pod/perlipc.pod
+++ b/pod/perlipc.pod
@@ -117,18 +117,20 @@ therefore block.
  The best way to prevent this issue is to use waitpid(), as in the 
following
  example:

-    use POSIX ":sys_wait_h"; # for nonblocking read
+    use POSIX qw(:signal_h :errno_h :sys_wait_h); # for nonblocking read

      my %children;

      $SIG{CHLD} = sub {
          # don't change $! and $? outside handler
          local ($!, $?);
-        my $pid = waitpid(-1, WNOHANG);
-        return if $pid == -1;
-        return unless defined $children{$pid};
-        delete $children{$pid};
-        cleanup_child($pid, $?);
+        while ( (my $pid = waitpid(-1, WNOHANG)) > 0 ) {
+            next unless defined $children{$pid};
+            if ( WIFEXITED($?) or WIFSIGNALED($?) ) {
+                delete $children{$pid};
+                cleanup_child($pid, $?);
+            }
+        }
      };

      while (1) {
-- 
1.7.9.5

---
Flags:
     category=docs
     severity=wishlist
---
Site configuration information for perl 5.14.2:

Configured by Debian Project at Fri Mar 23 17:14:02 UTC 2012.

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

   Platform:
     osname=linux, osvers=2.6.24-31-server, 
archname=x86_64-linux-gnu-thread-multi
     uname='linux allspice 2.6.24-31-server #1 smp tue feb 14 13:12:22 
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 
-Dsitelib=/usr/local/share/perl/5.14.2 
-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 
-Dlibperl=libperl.so.5.14.2 -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
   Compiler:
     cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN 
-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include 
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
     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', 
lseeksize=8
     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, libperl=libperl.so.5.14.2
     gnulibc_version='2.15'
   Dynamic Linking:
     dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
     cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib 
-fstack-protector'

Locally applied patches:


---
@INC for perl 5.14.2:
     /etc/perl
     /usr/local/lib/perl/5.14.2
     /usr/local/share/perl/5.14.2
     /usr/lib/perl5
     /usr/share/perl5
     /usr/lib/perl/5.14
     /usr/share/perl/5.14
     /usr/local/lib/site_perl
     .

---
Environment for perl 5.14.2:
     HOME=/home/worldmind42
     LANG=ru_RU.UTF-8
     LANGUAGE (unset)
     LD_LIBRARY_PATH (unset)
     LOGDIR (unset)
 
PATH=/home/worldmind42/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
     PERL_BADLANG (unset)
     SHELL=/bin/bash


Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About