1606e0002SDavid du Colombier #include <u.h>
2606e0002SDavid du Colombier #include <libc.h>
3606e0002SDavid du Colombier
4606e0002SDavid du Colombier static int wdog;
5606e0002SDavid du Colombier
6606e0002SDavid du Colombier int
procctl(int pid)7606e0002SDavid du Colombier procctl(int pid)
8606e0002SDavid du Colombier {
9606e0002SDavid du Colombier int ctlfd;
10606e0002SDavid du Colombier char *ctl;
11606e0002SDavid du Colombier
12606e0002SDavid du Colombier ctl = smprint("/proc/%d/ctl", pid);
13606e0002SDavid du Colombier ctlfd = open(ctl, OWRITE);
14606e0002SDavid du Colombier if (ctlfd < 0)
15606e0002SDavid du Colombier sysfatal("open %s: %r", ctl);
16606e0002SDavid du Colombier free(ctl);
17606e0002SDavid du Colombier return ctlfd;
18606e0002SDavid du Colombier }
19606e0002SDavid du Colombier
20606e0002SDavid du Colombier void
main(int,char **)21606e0002SDavid du Colombier main(int, char **)
22606e0002SDavid du Colombier {
23606e0002SDavid du Colombier int ctl;
24606e0002SDavid du Colombier
25606e0002SDavid du Colombier wdog = open("#w/wdctl", ORDWR);
26606e0002SDavid du Colombier if (wdog < 0)
27606e0002SDavid du Colombier sysfatal("open #w/wdctl: %r");
28606e0002SDavid du Colombier
29606e0002SDavid du Colombier switch(rfork(RFPROC|RFNOWAIT|RFFDG)){
30606e0002SDavid du Colombier case 0:
31606e0002SDavid du Colombier break;
32606e0002SDavid du Colombier default:
33606e0002SDavid du Colombier exits(0);
34606e0002SDavid du Colombier }
35606e0002SDavid du Colombier
36606e0002SDavid du Colombier ctl = procctl(getpid());
37606e0002SDavid du Colombier fprint(ctl, "pri 18");
38606e0002SDavid du Colombier close(ctl);
39606e0002SDavid du Colombier
40606e0002SDavid du Colombier if (fprint(wdog, "enable") < 0)
41*09474398SDavid du Colombier sysfatal("write #w/wdctl enable: %r");
42606e0002SDavid du Colombier for(;;){
43606e0002SDavid du Colombier sleep(300); /* allows 4.2GHz CPU, with some slop */
44606e0002SDavid du Colombier seek(wdog, 0, 0);
45606e0002SDavid du Colombier if (fprint(wdog, "restart") < 0)
46*09474398SDavid du Colombier sysfatal("write #w/wdctl restart: %r");
47606e0002SDavid du Colombier }
48606e0002SDavid du Colombier }
49