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
-
[perl #113028] [PATCH] Full example of REAPER in perlipc
by Alexey Shrub