1 #include <u.h>
2 #include <libc.h>
3
4 static int wdog;
5
6 int
procctl(int pid)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
main(int,char **)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