X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=secnet.git;a=blobdiff_plain;f=process.c;h=8e464beb464707b5761338b0b29b81f62bacdfde;hp=d9d01cec2c1abc090e8c4911482c071664f3d514;hb=d3fe100dfc120244d316e083ce87b1eb130fe4fd;hpb=042a8da9053c205ea74ec1785c93ca4bcf4ea5e0 diff --git a/process.c b/process.c index d9d01ce..8e464be 100644 --- a/process.c +++ b/process.c @@ -5,6 +5,23 @@ #include #include "process.h" +/* Advice about children from Peter: +Better way: before the fork, make a pipe. In the child close the ++reading end. Make the writing end close-on-exec. If the dup2 or exec fails, ++write the errno value. In the parent, close the writing end. Now you can read ++from it. If you get an errno value from the pipe, the process failed and you ++know why. If you get EOF, the exec succeeded. + + So, close on exec only closes if exec isn't going to return then? + qu: I wouldn't bother with all that with pipes. Remember that the ++runtime system can still make exec fail when it's `too late'. + Diz - I would rather have a coherant error message than 'child failed' + The child, if it fails to exec, should print a message to stderr ++(giving errno and what it was trying to execute, most likely), and exit ++nonzero. + It should exit calling _exit. +*/ + /* Process handling - subprocesses, signals, etc. */ static bool_t signal_handling=False;