Re: fork ???
- From: "David Wheeler" <dwheeler ida org>
- To: gnome-devel-list gnome org
- Subject: Re: fork ???
- Date: Mon, 17 Jul 2000 13:46:36 -0400
> From the fork() man page:
>
> [...]
> Under Linux, vfork is merely an alias for fork.
That's no longer true. On Linux since 2.2.0-pre9 (on i386)
vfork is an independent system call (somewhat later on other architectures),
implemented to handle (old) code that uses vfork().
In general: don't use vfork(), use fork(). vfork() is full of traps
for the unwary. For example, from the man page:
the behaviour
is undefined if the process created by vfork() either modifies
any data other than a variable of type pid_t used to
store the return value from vfork()...
That data includes "hidden" data modified by the C compiler (like temporary
variables used internally by the compiler for processors like x86s with few
registers). So, to be SURE your code will work you have to know
or examine the assembly code generated by the version of the
compiler you're using for each processor you're using :-(.
Thankfully, typical code usually "happens to
work", but who needs this kind of grief? Then there's weirdnesses
involving signals, shared memory, failed execs, etc.
vfork() is an old performance hack for systems without copy-on-write;
with today's systems it's usually not worth the potential reliability problems.
My man page of vfork(2) says:
It is rather unfortunate that Linux revived this spectre
from the past.
--
--- David A. Wheeler
dwheeler@ida.org
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]