Messages in this thread | | | Date | Mon, 10 Jul 2006 14:54:35 -0400 | From | Jeff Dike <> | Subject | Re: [OT] 'volatile' in userspace |
| |
On Mon, Jul 10, 2006 at 10:00:37AM -0700, Joshua Hudson wrote: > Yes, I use vfork. So far, the only way I have found for the parent to > know whether or not the child's exec() failed is this way:
What I do in UML is make a pipe between the parent and child, set it CLOEXEC, and write a byte down it if the exec fails.
The parent reads it - if it gets no bytes, the exec succeeded, if it gets one byte, it failed.
child - execvp(argv[0], argv); errval = errno; write(data->fd, &errval, sizeof(errval));
parent - socketpair(AF_UNIX, SOCK_STREAM, 0, fds); fcntl(fds[1], F_SETFD, flag); pid = clone(child, NULL, SIGCHLD, NULL); if(pid < 0){ ... }
close(fds[1]);
/* Read the errno value from the child, if the exec failed, or get 0 if * the exec succeeded because the pipe fd was set as close-on-exec. */ n = read(fds[0], &ret, sizeof(ret)); if (n < 0) { } else if(n != 0){ /* exec failed */ } else { /* exec succeeded */ }
Jeff - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |