tnew test program - plan9port - [fork] Plan 9 from user space (HTM) git clone git://src.adamsgaard.dk/plan9port (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 793d93626b7d01ff47e1c0b483e25ccf894ccb51 (DIR) parent ba15d71b0cf27ba89d14b547d7ded643e5de6a01 (HTM) 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(-) --- (DIR) 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], w->time[2], w->msg); + threadexits(nil); +}