From: Sean Chittenden Date: 2001-07-27T18:50:13+09:00 Subject: [ruby-talk:18618] Re: IO.popen --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 iEYEARECAAYFAjthOUwACgkQn09c7x7d+q1B0ACgyuzo7BdNKJl9vDh3u/JHHzPQ IN0AnjzAO3csJmCTy0c09jqqDmVMiW1Z =AOlc -----END PGP SIGNATURE----- --eQ8QKBgzzGzhafWG--