On Fri, Mar 11, 2011 at 12:56:43PM +1100, Angus Salkeld
wrote:> Hi
>
> I am writing a python test suite that uses oz
(https://github.com/clalancette/oz)
> which uses libquestfs. I am simulating a small cloud and have some apps
that need
> to talk to the guests.
>
> All works really well until I needed to start another process.
> So I start a process then "oz" starts up a VM (it uses
libquestfs)
> then when "oz" cleans up it calls libquestfs.kill_subprocess().
> At this point my test locks up.
As Chris says, any reason to be using kill_subprocess at all? You can
just delete the handle which has the same effect (and is a much more
well-tested path). Something like:
del g
> A bacetrace of the python code is:
> #0 0x00000036fe80ef1e in waitpid () from /lib64/libpthread.so.0
> #1 0x0000003629c0df7f in guestfs_close () from /usr/lib64/libguestfs.so.0
> then a mess of python stuff
>
> If I attach to it with strace it shows:
> wait4(0,
>
> It looks like libguestfs's children are already dead
> pstree 13107
> python???cped???3*[{cped}]
> ??qpidd???9*[{qpidd}]
>
> so it's seems like it's waiting on my process to die.
>
> So I changed the oz code to call close (in python "del obj") and
all is well,
> however I was looking in libquestfs code and saw:
> #if 0
> /* Set up a new process group, so we can signal this process
> * and all subprocesses (eg. if qemu is really a shell script).
> */
> setpgid (0, 0);
> #endif
>
> Any reason this is "if def'ed" out?
> this was done in commit 88f69eb03160a62d38
> I was thinking this might prevent my problem from occuring in the
> first place?
I don't know why exactly waitpid isn't working, but I doubt it's
anything to do with the (lack of) a process group.
Are you using a qemu wrapper script?
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
libguestfs lets you edit virtual machines. Supports shell scripting,
bindings from many languages. http://libguestfs.org