plan9fox/sys/src/cmd/cwfs/proc.c
2011-06-16 17:33:26 +02:00

42 lines
742 B
C

#include "all.h"
#include "io.h"
/*
* based on libthread's threadsetname, but drags in less library code.
* actually just sets the arguments displayed.
*/
void
procsetname(char *fmt, ...)
{
int fd;
char *cmdname;
char buf[128];
va_list arg;
va_start(arg, fmt);
cmdname = vsmprint(fmt, arg);
va_end(arg);
if (cmdname == nil)
return;
snprint(buf, sizeof buf, "#p/%d/args", getpid());
if((fd = open(buf, OWRITE)) >= 0){
write(fd, cmdname, strlen(cmdname)+1);
close(fd);
}
free(cmdname);
}
void
newproc(void (*f)(void *), void *arg, char *text)
{
int kid = rfork(RFPROC|RFMEM|RFNOWAIT);
if (kid < 0)
sysfatal("can't fork: %r");
if (kid == 0) {
procsetname("%s", text);
(*f)(arg);
exits("child returned");
}
}