1*8200Smckusick static char sccsid[] = "@(#)netstart.c 4.1 (Berkeley) 09/12/82";
2*8200Smckusick
3*8200Smckusick # include "defs.h"
4*8200Smckusick /* sccs id variable */
5*8200Smckusick static char *netstart_sid = "@(#)netstart.c 1.2";
6*8200Smckusick
7*8200Smckusick /*
8*8200Smckusick * this is a simple program to start up the net daemon,
9*8200Smckusick * and when it fails, restart it
10*8200Smckusick *
11*8200Smckusick */
12*8200Smckusick static int daemon = 32767; /* a nice safe process number */
main(argc,argv)13*8200Smckusick main(argc,argv)
14*8200Smckusick char **argv; {
15*8200Smckusick int r,killit(),pid;
16*8200Smckusick while((pid = fork()) == -1)sleep(2);
17*8200Smckusick if(pid != 0)exit(EX_OK);
18*8200Smckusick submit(getpid());
19*8200Smckusick signal(SIGQUIT,SIG_IGN);
20*8200Smckusick signal(SIGHUP,SIG_IGN);
21*8200Smckusick signal(SIGINT,SIG_IGN);
22*8200Smckusick signal(SIGTERM,killit);
23*8200Smckusick /* will set remote */
24*8200Smckusick parseargs(argc,argv);
25*8200Smckusick addtolog(remote,"Netstart started, process id #%d\n",getpid());
26*8200Smckusick for(;;){
27*8200Smckusick while((daemon=fork()) == -1)sleep(2);
28*8200Smckusick if(daemon == 0){
29*8200Smckusick argv[0] = "netdaemon";
30*8200Smckusick argv[argc] = 0;
31*8200Smckusick execv(NETDAEMON,argv);
32*8200Smckusick exit(EX_UNAVAILABLE);
33*8200Smckusick }
34*8200Smckusick wait(&r);
35*8200Smckusick addtolog(remote,"Net daemon exit code %d, low byte 0%o\n",
36*8200Smckusick (r>>8), (r&0377));
37*8200Smckusick sleep(100); /* avoid looping too fast */
38*8200Smckusick }
39*8200Smckusick }
killit()40*8200Smckusick killit(){
41*8200Smckusick kill(daemon,SIGTERM); /* send terminate */
42*8200Smckusick sleep(2); /* wait till cleanup */
43*8200Smckusick kill(daemon,SIGKILL); /* kill in case too */
44*8200Smckusick exit(EX_OK);
45*8200Smckusick }
46*8200Smckusick /* add to allow netstart.c to load */
initseqno()47*8200Smckusick initseqno(){};
48