ref: a351bcdccdf5a4273bc8dc3360a48fbb8b8aa9ea
dir: /progs/texec.c.ms/
.P1 .ps -1 .ti -1i .B .BX texec.c .ps +1 .CW .ps -2 .vs .15i #include <u.h> #include <libc.h> #include <thread.h> Channel*waitc; Channel*pidc; void cmdproc(void* arg) { char* cmd = arg; procexecl(pidc, cmd, cmd, nil); sysfatal("procexecl: %r"); } .ps +2 .P2 .P1 .ps -2 void threadmain(int, char*[]) { char ln[512]; int pid, nr; Waitmsg *m; write(1, "cmd? ", 5); nr = read(0, ln, sizeof(ln)-1); if (nr <= 1) threadexits(nil); ln[nr-1] = 0; // drop \en pidc = chancreate(sizeof(ulong), 1); waitc= threadwaitchan(); proccreate(cmdproc, ln, 8*1024); pid = recvul(pidc); print("started new proc pid=%d\en", pid); if (pid >= 0){ m = recvp(waitc); print("terminated pid=%d sts=%s\en", m->pid, m->msg); free(m); } threadexits(nil); } .ps +2 .P2