From owner-freebsd-hackers@FreeBSD.ORG Fri Nov 28 04:46:53 2003 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 92ECA16A4CE for ; Fri, 28 Nov 2003 04:46:53 -0800 (PST) Received: from razorbill.mail.pas.earthlink.net (razorbill.mail.pas.earthlink.net [207.217.121.248]) by mx1.FreeBSD.org (Postfix) with ESMTP id 03E1343F85 for ; Fri, 28 Nov 2003 04:46:52 -0800 (PST) (envelope-from tlambert2@mindspring.com) Received: from user-2ivfjun.dialup.mindspring.com ([165.247.207.215] helo=mindspring.com) by razorbill.mail.pas.earthlink.net with asmtp (SSLv3:RC4-MD5:128) (Exim 3.33 #1) id 1APi1K-0001vV-00; Fri, 28 Nov 2003 04:46:50 -0800 Message-ID: <3FC743A7.DC5461EA@mindspring.com> Date: Fri, 28 Nov 2003 04:46:31 -0800 From: Terry Lambert X-Mailer: Mozilla 4.79 [en] (Win98; U) X-Accept-Language: en MIME-Version: 1.0 To: rmkml References: Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-ELNK-Trace: b1a02af9316fbb217a47c185c03b154d40683398e744b8a4f630b6773801f956d0912bf49314f0e0350badd9bab72f9c350badd9bab72f9c350badd9bab72f9c cc: freebsd-hackers@freebsd.org Subject: Re: question about _exit() function X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 28 Nov 2003 12:46:53 -0000 rmkml wrote: > is the _exit() function safe for a thread ? > my program use vfork() and then execve in a thread context. > The documentation mentions that the process has to call _exit() in case > of failure. > But this _exit() is really safe for the parent thread ? The behaviour is undefined in the failure case, but only if you have stablishd a pthread_atfork() handler that does anything in the child. In general, the more correct approach is to use posix_spawn(), but FreeBSD doesn't support posix_spawn() (funny; this has come up now twice in within 60 messages of each other, while ther was a very long time when it was not pertinent at all...). POSIX also sriously discourages the use of vfork(), and recommends fork() instead, for threaded programs. Note that the fork() only *ever* creates a single thread, so it will only replicate the currently running thread and its address space, rather than all currently running threads in the parent. You said in another message that this is on 4.8. I think that the behaviour will not be quite what you expect, in that case, and that it'll be better in -current, but might still not be what you expect there, either (depends on what you are expecting). See also: http://www.opengroup.org/onlinepubs/007904975/functions/fork.html -- Terry