Date: Wed, 7 Apr 1999 17:38:51 -0700 (PDT) From: Matthew Dillon <dillon@apollo.backplane.com> To: Simon Shapiro <shimon@simon-shapiro.org> Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: wait4 - Proof I am stupid Message-ID: <199904080038.RAA07199@apollo.backplane.com> References: <XFMail.990407203255.shimon@simon-shapiro.org>
next in thread | previous in thread | raw e-mail | index | archive | help
:Hi Y'll,
:
:Please bear with me:
:...
:
: switch (y = wait4((-1)* my_pgid, &z, NULL)) {
:...
:
:Question: Why? Obviously I am doing something wrong, but what?
wait4 takes four arguments, not three. man wait4.
I also strongly suggest compiling with -Wall so you get appropriate
errors when you forget to include the right header files.
Also, your code flow for fork() is dangerous, even if it is only
demonstration code :-). When you fork, the child should never fall
through into the parents code... it should _exit(0)
( note the underscore ) before then. You also need to make sure that
any FILE buffers are flushed before you fork to avoid a double-flush
( where both parent and child flush the same buffered data in FILEs ).
fflush(stdout); /* prevent double flush from occuring in child */
fflush(stderr); /* prevent double flush from occuring in child */
if ((pid = fork()) == 0) {
/* child does something */
_exit(0);
}
if (pid == (pid_t)-1) {
/* fork error occured */
exit(1);
}
/* parent continues execution */
To wait for the child to exit with wait4():
if (wait4(pid, NULL, 0, NULL) < 0) {
/* something unexpected happened */
}
/* wait complete. child is gone */
If you are interested in using a more portable function, look at
waitpid() rather then wait4().
if (waitpid(pid, NULL, 0) < 0) {
/* something unexpected happened */
}
/* wait complete. child is gone */
If you want the return code:
int status;
int return_code;
if (waitpid(pid, &status, 0) < 0) {
/* something unexpected happened */
}
return_code = WEXITSTATUS(status);
See 'man waitpid'.
-Matt
Matthew Dillon
<dillon@backplane.com>
:Note: The ``code'' above is illutration only...
:
:Sincerely Yours, Shimon@Simon-Shapiro.ORG
: 770.265.7340
:Simon Shapiro
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199904080038.RAA07199>
