Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

#include <u.h>
#include <libc.h>

static int wdog;

int
procctl(int pid)
{
        int ctlfd;
        char *ctl;

        ctl = smprint("/proc/%d/ctl", pid);
        ctlfd = open(ctl, OWRITE);
        if (ctlfd < 0)
                sysfatal("open %s: %r", ctl);
        free(ctl);
        return ctlfd;
}

void
main(int, char **)
{
        int ctl;

        wdog = open("#w/wdctl", ORDWR);
        if (wdog < 0)
                sysfatal("open #w/wdctl: %r");

        switch(rfork(RFPROC|RFNOWAIT|RFFDG)){
        case 0:
                break;
        default:
                exits(0);
        }

        ctl = procctl(getpid());
        fprint(ctl, "pri 18");
        close(ctl);

        if (fprint(wdog, "enable") < 0)
                sysfatal("write #w/wdctl enable: %r");
        for(;;){
                sleep(300);             /* allows 4.2GHz CPU, with some slop */
                seek(wdog, 0, 0);
                if (fprint(wdog, "restart") < 0)
                        sysfatal("write #w/wdctl restart: %r");
        }
}