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