@@ -267,12 +267,15 @@ class QemuRunner:
self.monitorpipe = os.fdopen(w, "w")
else:
# child process
- os.setpgrp()
- os.close(w)
- r = os.fdopen(r)
- x = r.read()
- os.killpg(os.getpgid(self.runqemu.pid), signal.SIGTERM)
- os._exit(0)
+ try:
+ os.setpgrp()
+ os.close(w)
+ r = os.fdopen(r)
+ x = r.read()
+ os.killpg(os.getpgid(self.runqemu.pid), signal.SIGTERM)
+ finally:
+ # We must exit under all circumstances
+ os._exit(0)
self.logger.debug("runqemu started, pid is %s" % self.runqemu.pid)
self.logger.debug("waiting at most %d seconds for qemu pid (%s)" %
If you send this forked process a SIGTERM, it will execute all of the parent's exit code leading to two sets of console/exit output which is extremely confusing. Wrap the code in a try/finally to ensure we always call os._exit() to avoid this. I spent far too long trying to work out the crazy console output from this. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> --- meta/lib/oeqa/utils/qemurunner.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)