Remind me to implement bb_fork_exec()...
authorRob Landley <rob@landley.net>
Sun, 29 Jan 2006 06:45:38 +0000 (06:45 -0000)
committerRob Landley <rob@landley.net>
Sun, 29 Jan 2006 06:45:38 +0000 (06:45 -0000)
docs/busybox.net/programming.html

index f77f3c3a639609dbbf2c398c034a6400e38cf2f8..6dbe6931fb687d09b6e57848193706b4b6b8327b 100644 (file)
@@ -235,6 +235,12 @@ second argument to pw_encrypt(text,buffer).</p>
 
 <h2><a name="tips_vfork">Fork and vfork</a></h2>
 
+<p>Busybox hides the difference between fork() and vfork() in
+libbb/bb_fork_exec.c.  If you ever want to fork and exec, use bb_fork_exec()
+(which returns a pid and takes the same arguments as execve(), although in
+this case envp can be NULL) and don't worry about it.  This description is
+here in case you want to know why that does what it does.</p>
+
 <p>On systems that haven't got a Memory Management Unit, fork() is unreasonably
 expensive to implement, so a less capable function called vfork() is used
 instead.</p>
@@ -277,6 +283,11 @@ processes running at the same time.  It means you can't have two processes
 sharing the same memory without stomping all over each other.  As soon as
 the child calls exec(), the parent resumes.</p>
 
+<p>If the child's attempt to call exec() fails, the child should call _exit()
+rather than a normal exit().  This avoids any atexit() code that might confuse
+the parent.  (The parent should never call _exit(), only a vforked child that
+failed to exec.)</p>
+
 <p>(Now in theory, a nommu system could just copy the _stack_ when it forks
 (which presumably is much shorter than the heap), and leave the heap shared.
 In practice, you've just wound up in a multi-threaded situation and you can't