Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 28 Nov 2003 15:48:46 +0100 (CET)
From:      rmkml <rmkml@wanadoo.fr>
To:        Terry Lambert <tlambert2@mindspring.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: question about _exit() function
Message-ID:  <Pine.LNX.4.58.0311281539380.22334@hp.mgn.net>
In-Reply-To: <3FC743A7.DC5461EA@mindspring.com>
References:  <Pine.LNX.4.58.0311272019050.16308@hp.mgn.net> <3FC743A7.DC5461EA@mindspring.com>

next in thread | previous in thread | raw e-mail | index | archive | help

Thanks a lot for the answer. I will change vfork() with fork().

An another question: in the man page of vfork() it is mentionned that
the fork() function has to use _exit(0) too when something wrong with the
execve() happens!
but in a thread context of my program, the use of _exit() may not be
best practice.
Is the child a real process or because of the thread context a part of
the parent process, so a new thread.
In this case a pthread_exit() may be a better solution.
Is that point a view complety wrong ?

Currently, is some indeterminate case, a part of my program freeze just
after the vfork().
So, I try to understand what may cause the calling thread of vfork() to
freeze ...

Thanks a lot!


On Fri, 28 Nov 2003, Terry Lambert wrote:

> Date: Fri, 28 Nov 2003 04:46:31 -0800
> From: Terry Lambert <tlambert2@mindspring.com>
> To: rmkml <rmkml@wanadoo.fr>
> Cc: freebsd-hackers@freebsd.org
> Subject: Re: question about _exit() function
>
> 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
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.LNX.4.58.0311281539380.22334>