tspawn.c (803B)
1 #include "u.h" 2 #include "libc.h" 3 #include "thread.h" 4 5 void 6 threadmain(int argc, char **argv) 7 { 8 int fd[3]; 9 Channel *c; 10 Waitmsg *w; 11 12 ARGBEGIN{ 13 case 'D': 14 break; 15 }ARGEND 16 17 c = threadwaitchan(); 18 fd[0] = dup(0, -1); 19 fd[1] = dup(1, -1); 20 fd[2] = dup(2, -1); 21 if(threadspawn(fd, argv[0], argv) < 0) 22 sysfatal("threadspawn: %r"); 23 fd[0] = dup(0, -1); 24 fd[1] = dup(1, -1); 25 fd[2] = dup(2, -1); 26 if(threadspawn(fd, argv[0], argv) < 0) 27 sysfatal("threadspawn: %r"); 28 w = recvp(c); 29 if(w == nil) 30 print("exec/recvp failed: %r\n"); 31 else 32 print("%d %lud %lud %lud %s\n", w->pid, w->time[0], w->time[1], w->time[2], w->msg); 33 w = recvp(c); 34 if(w == nil) 35 print("exec/recvp failed: %r\n"); 36 else 37 print("%d %lud %lud %lud %s\n", w->pid, w->time[0], w->time[1], w->time[2], w->msg); 38 threadexits(nil); 39 }