1 #include <u.h> 2 #include <libc.h> 3 4 static int wdog; 5 6 int 7 procctl(int pid) 8 { 9 int ctlfd; 10 char *ctl; 11 12 ctl = smprint("/proc/%d/ctl", pid); 13 ctlfd = open(ctl, OWRITE); 14 if (ctlfd < 0) 15 sysfatal("open %s: %r", ctl); 16 free(ctl); 17 return ctlfd; 18 } 19 20 void 21 main(int, char **) 22 { 23 int ctl; 24 25 wdog = open("#w/wdctl", ORDWR); 26 if (wdog < 0) 27 sysfatal("open #w/wdctl: %r"); 28 29 switch(rfork(RFPROC|RFNOWAIT|RFFDG)){ 30 case 0: 31 break; 32 default: 33 exits(0); 34 } 35 36 ctl = procctl(getpid()); 37 fprint(ctl, "pri 18"); 38 close(ctl); 39 40 if (fprint(wdog, "enable") < 0) 41 sysfatal("write #w/wdctl enable: %r"); 42 for(;;){ 43 sleep(300); /* allows 4.2GHz CPU, with some slop */ 44 seek(wdog, 0, 0); 45 if (fprint(wdog, "restart") < 0) 46 sysfatal("write #w/wdctl restart: %r"); 47 } 48 } 49