[libvirt] Zombie process after open libvirt connection
Carlos Rodrigues
cmar at eurotux.com
Mon Mar 17 11:13:08 UTC 2014
Hell Michal,
Thank you for your answer, but this doesn't fix my problem.
Run your fixed script and we get the same behavior:
$ perl test-chldhandle-bug-fixed.pl
init... pid=29713
while...
fork 1
end... pid=29716
receive chld
fork 2
end... pid=29717
receive chld
2014-03-17 11:10:37.234+0000: 29713: info : libvirt version: 1.0.5.7, package: 2.fc19 (Fedora Project, 2013-11-17-23:21:57, buildvm-18.phx2.fedoraproject.org)
2014-03-17 11:10:37.234+0000: 29713: warning : virNetTLSContextCheckCertificate:1099 : Certificate check failed Certificate [session] owner does not match the hostname 10.10.4.249
connection open
fork 3
end... pid=29827
fork 4
end... pid=29930
go next...
In my daemon version, i also use waitpid for child treatment.
Regards,
--
Carlos Rodrigues
Engenheiro de Software Sénior
Eurotux Informática, S.A. | www.eurotux.com
(t) +351 253 680 300 (m) +351 911 926 110
On Seg, 2014-03-17 at 12:04 +0100, Michal Privoznik wrote:
> On 17.03.2014 11:13, Carlos Rodrigues wrote:
> > Hello,
> >
> > Does anyone can help me? I a need a solution for this, 'cause i have a
> > process/daemon, it reaches about 200 zombie processes, after open a new
> > libvirt connection with qemu+tls.
> >
> > Best regards,
> >
>
> From the script you've attached:
>
> $SIG{'CHLD'} = sub { print "receive chld","\n"; };
>
> You should either waitpid() child here or at the end of the script. The
> former approach won't leave any zombies hanging around, the latter
> requires you to keep return values of fork(). So I think your script
> needs to look like this:
>
> $ diff -up test-chldhandle-bug.pl test-chldhandle-bug-fixed.pl
> --- test-chldhandle-bug.pl 2014-03-17 11:59:48.972238074 +0100
> +++ test-chldhandle-bug-fixed.pl 2014-03-17 12:03:08.693875968 +0100
> @@ -5,10 +5,12 @@ use strict;
>
> use Sys::Virt;
> use POSIX qw(:signal_h);
> +use POSIX ":sys_wait_h";
>
> sub main {
> print "init... pid=$$","\n";
> - $SIG{'CHLD'} = sub { print "receive chld","\n"; };
> + $SIG{'CHLD'} = sub { my $kid; print "receive chld","\n";
> + do { $kid = waitpid(-1, WNOHANG); } while $kid > 0; };
>
> while(1){
> print "while...","\n";
>
>
> Michal
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140317/15b8c295/attachment-0001.htm>
More information about the libvir-list
mailing list