[libvirt] [PATCH 2/5] daemonize qemu processes
Guido Günther
agx at sigxcpu.org
Thu Dec 18 09:42:26 UTC 2008
On Mon, Dec 15, 2008 at 02:22:42PM +0100, Daniel Veillard wrote:
> On Mon, Dec 15, 2008 at 11:21:20AM +0000, Daniel P. Berrange wrote:
> > On Fri, Dec 12, 2008 at 07:26:32PM +0100, Guido G?nther wrote:
> > > + if (kill(vm->pid, SIGTERM) < 0)
> > > + qemudLog(QEMUD_ERROR, _("Failed to send SIGTERM to %s (%d): %s\n"),
> > > + vm->def->name, vm->pid, strerror(errno));
> >
> > We should add a guard around all the kill() statements for
> >
> > if (vm->pid > 1)
> > kill..
> >
> > One of the bugs I found when doing the LXC/UML drivers is that when relying
> > on an external PID file, some things can go wrong in unexpected ways that
> > just don't happen when getting the PID straight back from fork. This often
> > ended up with vm->pid being -1, 0 with horrific results -
> >
> > "If pid equals -1, then sig is sent to every process for which the calling
> > process has permission to send signals, except for process 1 (init)"
> >
> > Yes, I killed every single process on my dev machine several times before
> > discovering this isues :-)
>
> This call for an utility function
> int virKillProcess(pid_t pid, int sig)
> call checking for this, could also help on debugging/logging
I'll add that. I'd like to apply the other 3 out of 5 patches that
monitor the state of the qemu instances nevertheless since they don't
change any behaviour but only add the necessary status tracking to fork
of the qemu/kvm processes later. This way we can easily check if the
status file is in sync with the running qemu by comapring it to "virsh
dumpxml".
Cheers,
-- Guido
More information about the libvir-list
mailing list