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);
       +}