]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/cwfs/proc.c
webfs(4): document -d and -D flags
[plan9front.git] / sys / src / cmd / cwfs / proc.c
1 #include "all.h"
2 #include "io.h"
3
4 /*
5  * based on libthread's threadsetname, but drags in less library code.
6  * actually just sets the arguments displayed.
7  */
8 void
9 procsetname(char *fmt, ...)
10 {
11         int fd;
12         char *cmdname;
13         char buf[128];
14         va_list arg;
15
16         va_start(arg, fmt);
17         cmdname = vsmprint(fmt, arg);
18         va_end(arg);
19         if (cmdname == nil)
20                 return;
21         snprint(buf, sizeof buf, "#p/%d/args", getpid());
22         if((fd = open(buf, OWRITE)) >= 0){
23                 write(fd, cmdname, strlen(cmdname)+1);
24                 close(fd);
25         }
26         free(cmdname);
27 }
28
29 void
30 newproc(void (*f)(void *), void *arg, char *text)
31 {
32         int kid = rfork(RFPROC|RFMEM|RFNOWAIT);
33
34         if (kid < 0)
35                 sysfatal("can't fork: %r");
36         if (kid == 0) {
37                 procsetname("%s", text);
38                 (*f)(arg);
39                 exits("child returned");
40         }
41 }