From owner-freebsd-hackers@FreeBSD.ORG Mon Jul 30 10:53:08 2012 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 662561065673 for ; Mon, 30 Jul 2012 10:53:08 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from mail.zoral.com.ua (mx0.zoral.com.ua [91.193.166.200]) by mx1.freebsd.org (Postfix) with ESMTP id D79108FC08 for ; Mon, 30 Jul 2012 10:53:07 +0000 (UTC) Received: from skuns.kiev.zoral.com.ua (localhost [127.0.0.1]) by mail.zoral.com.ua (8.14.2/8.14.2) with ESMTP id q6UArGxT050148; Mon, 30 Jul 2012 13:53:16 +0300 (EEST) (envelope-from kostikbel@gmail.com) Received: from deviant.kiev.zoral.com.ua (kostik@localhost [127.0.0.1]) by deviant.kiev.zoral.com.ua (8.14.5/8.14.5) with ESMTP id q6UAr3Yp057797; Mon, 30 Jul 2012 13:53:03 +0300 (EEST) (envelope-from kostikbel@gmail.com) Received: (from kostik@localhost) by deviant.kiev.zoral.com.ua (8.14.5/8.14.5/Submit) id q6UAr3K4057796; Mon, 30 Jul 2012 13:53:03 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: deviant.kiev.zoral.com.ua: kostik set sender to kostikbel@gmail.com using -f Date: Mon, 30 Jul 2012 13:53:03 +0300 From: Konstantin Belousov To: Jilles Tjoelker Message-ID: <20120730105303.GU2676@deviant.kiev.zoral.com.ua> References: <20120730102408.GA19983@stack.nl> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="kAxYX6Dg+VZz1yCk" Content-Disposition: inline In-Reply-To: <20120730102408.GA19983@stack.nl> User-Agent: Mutt/1.4.2.3i X-Virus-Scanned: clamav-milter 0.95.2 at skuns.kiev.zoral.com.ua X-Virus-Status: Clean X-Spam-Status: No, score=-4.0 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.2.5 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on skuns.kiev.zoral.com.ua Cc: freebsd-hackers@freebsd.org Subject: Re: system() using vfork() or posix_spawn() X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 30 Jul 2012 10:53:08 -0000 --kAxYX6Dg+VZz1yCk Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Jul 30, 2012 at 12:24:08PM +0200, Jilles Tjoelker wrote: > People sometimes use system() from large address spaces where it would > improve performance greatly to use vfork() instead of fork(). >=20 > A simple approach is to change fork() to vfork(), although I have not > tried this. It seems safe enough to use sigaction and sigprocmask system > calls in the vforked process. >=20 > Alternatively, we can have posix_spawn() do the vfork() with signal > changes. This avoids possible whining from compilers and static > analyzers about using vfork() in system.c. However, I do not like the > tricky code for signals and that it adds lines of code. >=20 > This is lightly tested. It is interesting to note that for some time our vfork(2) no longer stops the whole forked process (parent), only the forking thread is waiting for the child exit or exec. I am not sure is this point important for system(3), but determined code can notice the difference from the fork->vfork switch. --kAxYX6Dg+VZz1yCk Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (FreeBSD) iEYEARECAAYFAlAWZ48ACgkQC3+MBN1Mb4jwrgCeM71zpb+alvqQpd3XPXBmj5My 9VwAn3LCDmMqkKLu41tAT01/aWRxQCRX =WDAV -----END PGP SIGNATURE----- --kAxYX6Dg+VZz1yCk--