| tnew test program - plan9port - [fork] Plan 9 from user space | |
| git clone git://src.adamsgaard.dk/plan9port | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit 793d93626b7d01ff47e1c0b483e25ccf894ccb51 | |
| parent ba15d71b0cf27ba89d14b547d7ded643e5de6a01 | |
| Author: rsc <devnull@localhost> | |
| Date: Fri, 22 Oct 2004 17:15:47 +0000 | |
| new test program | |
| Diffstat: | |
| A src/libthread/tspawn.c | 41 +++++++++++++++++++++++++++++… | |
| 1 file changed, 41 insertions(+), 0 deletions(-) | |
| --- | |
| diff --git a/src/libthread/tspawn.c b/src/libthread/tspawn.c | |
| t@@ -0,0 +1,41 @@ | |
| +#include <lib9.h> | |
| +#include <thread.h> | |
| +extern int _threaddebuglevel; | |
| + | |
| +void | |
| +doexec(void *v) | |
| +{ | |
| + int fd[3]; | |
| + char **argv = v; | |
| + | |
| + print("exec failed: %r\n"); | |
| + sendp(threadwaitchan(), nil); | |
| + threadexits(nil); | |
| +} | |
| + | |
| +void | |
| +threadmain(int argc, char **argv) | |
| +{ | |
| + int fd[3]; | |
| + Channel *c; | |
| + Waitmsg *w; | |
| + | |
| + ARGBEGIN{ | |
| + case 'D': | |
| + _threaddebuglevel = ~0; | |
| + break; | |
| + }ARGEND | |
| + | |
| + c = threadwaitchan(); | |
| + fd[0] = dup(0, -1); | |
| + fd[1] = dup(1, -1); | |
| + fd[2] = dup(2, -1); | |
| + if(threadspawn(fd, argv[0], argv) < 0) | |
| + sysfatal("threadspawn: %r"); | |
| + w = recvp(c); | |
| + if(w == nil) | |
| + print("exec/recvp failed: %r\n"); | |
| + else | |
| + print("%d %lud %lud %lud %s\n", w->pid, w->time[0], w->time[1]… | |
| + threadexits(nil); | |
| +} |