--eQ8QKBgzzGzhafWG
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

> Should I replace "vfork" by "fork"?  I don't have enough knowledge to
> decide.   Any OS guru?

	By no means would I consider myself an OS guru, but, this tid
bit is taken from the FreeBSD man page.  Though I haven't looked at the
code, I bet the child process isn't exiting correctly as the man page
indicates.  The use of vfork() seems like a performance win when used
correctly.  -sc

     Vfork() can be used to create new processes without fully copying the
     address space of the old process, which is horrendously inefficient in=
 a
     paged environment.  It is useful when the purpose of fork(2) would have
     been to create a new system context for an execve(2).  Vfork() differs
     from fork(2) in that the child borrows the parent's memory and thread =
of
     control until a call to execve(2) or an exit (either by a call to
     _exit(2) or abnormally).  The parent process is suspended while the ch=
ild
     is using its resources.

     Vfork() returns 0 in the child's context and (later) the pid of the ch=
ild
     in the parent's context.

     Vfork() can normally be used just like fork(2).  It does not work, how-
     ever, to return while running in the childs context from the procedure
     that called vfork() since the eventual return from vfork() would then
     return to a no longer existent stack frame.  Be careful, also, to call
     _exit(2) rather than exit(3) if you can't execve(2), since exit(3) will
     flush and close standard I/O channels, and thereby mess up the parent
     processes standard I/O data structures.  (Even with fork(2) it is wrong
     to call exit(3) since buffered data would then be flushed twice.)

--=20
Sean Chittenden

--eQ8QKBgzzGzhafWG
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Comment: Sean Chittenden <sean / chittenden.org>

iEYEARECAAYFAjthOUwACgkQn09c7x7d+q1B0ACgyuzo7BdNKJl9vDh3u/JHHzPQ
IN0AnjzAO3csJmCTy0c09jqqDmVMiW1Z
=AOlc
-----END PGP SIGNATURE-----

--eQ8QKBgzzGzhafWG--
> Should I replace "vfork" by "fork"?  I don't have enough knowledge to
> decide.   Any OS guru?

	By no means would I consider myself an OS guru, but, this tid
bit is taken from the FreeBSD man page.  Though I haven't looked at the
code, I bet the child process isn't exiting correctly as the man page
indicates.  The use of vfork() seems like a performance win when used
correctly.  -sc

     Vfork() can be used to create new processes without fully copying the
     address space of the old process, which is horrendously inefficient in=
 a
     paged environment.  It is useful when the purpose of fork(2) would have
     been to create a new system context for an execve(2).  Vfork() differs
     from fork(2) in that the child borrows the parent's memory and thread =
of
     control until a call to execve(2) or an exit (either by a call to
     _exit(2) or abnormally).  The parent process is suspended while the ch=
ild
     is using its resources.

     Vfork() returns 0 in the child's context and (later) the pid of the ch=
ild
     in the parent's context.

     Vfork() can normally be used just like fork(2).  It does not work, how-
     ever, to return while running in the childs context from the procedure
     that called vfork() since the eventual return from vfork() would then
     return to a no longer existent stack frame.  Be careful, also, to call
     _exit(2) rather than exit(3) if you can't execve(2), since exit(3) will
     flush and close standard I/O channels, and thereby mess up the parent
     processes standard I/O data structures.  (Even with fork(2) it is wrong
     to call exit(3) since buffered data would then be flushed twice.)

--=20
Sean Chittenden
-----BEGIN PGP SIGNATURE-----
Comment: Sean Chittenden <sean / chittenden.org>

iEYEARECAAYFAjthOUwACgkQn09c7x7d+q1B0ACgyuzo7BdNKJl9vDh3u/JHHzPQ
IN0AnjzAO3csJmCTy0c09jqqDmVMiW1Z
=AOlc
-----END PGP SIGNATURE-----