From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54310) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WFgXp-000474-7A for qemu-devel@nongnu.org; Tue, 18 Feb 2014 04:00:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WFgXg-0004ga-Qo for qemu-devel@nongnu.org; Tue, 18 Feb 2014 04:00:49 -0500 Received: from mail-we0-x232.google.com ([2a00:1450:400c:c03::232]:34720) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WFgXg-0004gO-E8 for qemu-devel@nongnu.org; Tue, 18 Feb 2014 04:00:40 -0500 Received: by mail-we0-f178.google.com with SMTP id q59so11181216wes.23 for ; Tue, 18 Feb 2014 01:00:39 -0800 (PST) Date: Tue, 18 Feb 2014 10:00:36 +0100 From: Stefan Hajnoczi Message-ID: <20140218090036.GA32585@stefanha-thinkpad.redhat.com> References: <1392651898-16749-1-git-send-email-stefanha@redhat.com> <1392651898-16749-3-git-send-email-stefanha@redhat.com> <87bny5u1rs.fsf@blackfin.pond.sub.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87bny5u1rs.fsf@blackfin.pond.sub.org> Subject: Re: [Qemu-devel] [PATCH 2/3] qtest: make QEMU our direct child process List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Markus Armbruster Cc: Peter Maydell , Andreas Faerber , qemu-devel@nongnu.org, Stefan Hajnoczi , Anthony Liguori On Mon, Feb 17, 2014 at 05:44:55PM +0100, Markus Armbruster wrote: > Stefan Hajnoczi writes: > > > qtest_init() cannot use exec*p() to launch QEMU since the exec*p() > > functions take an argument array while qtest_init() takes char > > *extra_args. Therefore we execute /bin/sh -c and let the > > shell parse the argument string. > > > > This left /bin/sh as our child process and our child's child was QEMU. > > We still want QEMU's pid so the -pidfile option was used to let QEMU > > report its pid. > > > > The pidfile needs to be unlinked when the test case exits or fails. In > > other words, the pidfile creates a new problem for us! > > > > Simplify all this using the shell 'exec' command. It allows us to > > replace the /bin/sh process with QEMU. Then we no longer need to use > > -pidfile because we already know our fork child's pid. > > > > Note: Yes, it seems silly to exec /bin/sh when we could just exec QEMU > > directly. But remember qtest_init() takes a single char *extra_args > > command-line fragment instead of a real argv[] array, so we need > > /bin/sh's argument parsing behavior. > > Sounds like a design mistake to me. I wouldn't call char *extra_args a mistake because strings are still simpler to manipulate in C than char *argv[] arrays. So we write less code in test cases and libqtest.c at the expense of a roundabout way to spawn the process. Stefan