6 * Copyright (C) 1987 by the Massachusetts Institute of Technology
7 * For copying and distribution information, please see the file
10 * This program starts the moira server in a "clean" environment.
11 * and then waits for it to exit.
16 static char *rcsid_sms_starter_c = "$Header$";
19 #include <mit-copyright.h>
22 #include <sys/types.h>
25 #include <sys/signal.h>
26 #include <sys/ioctl.h>
27 #include <moira_site.h>
37 "illegal instruction",
44 "segmentation violation",
49 "urgent I/O condition",
54 "stopped (tty input)",
55 "stopped (tty output)",
57 "cputime limit exceeded",
58 "filesize limit exceeded",
59 "virtual timer expired",
60 "profiling timer expired",
61 "window size changed",
63 "user defined signal 1",
64 "user defined signal 2",
77 while (wait3(&stat, WNOHANG, 0) > 0) {
78 if (WIFEXITED(stat)) {
81 "exited with code %d\n",
84 if (WIFSIGNALED(stat)) {
85 sprintf(buf, "exited on %s signal%s\n",
86 sigdescr[stat.w_termsig],
87 (stat.w_coredump?"; Core dumped":0));
89 write(rdpipe[1], buf, strlen(buf));
99 int logf, inf, i, done, pid, tty;
102 extern char *sys_errlist[];
104 int nfds = getdtablesize();
107 signal(SIGCHLD, cleanup);
109 sprintf(buf, "%s/moira.log", SMS_DIR);
110 logf = open(buf, O_CREAT|O_WRONLY|O_APPEND, 0640);
115 inf = open("/dev/null", O_RDONLY , 0);
132 tty = open("/dev/tty");
133 ioctl(tty, TIOCNOTTY, 0);
135 sprintf(buf, "%s/%s", BIN_DIR, PROG);
137 if ((pid = fork()) == 0) {
142 for (i = 3; i <nfds; i++) close(i);
144 perror("cannot run moirad");
148 perror("moira_starter");
152 log = fdopen(logf, "w");
153 prog = fdopen(rdpipe[0], "r");
158 extern char *ctime();
163 if (fgets(buf, BUFSIZ, prog) == NULL) {
165 strcpy(buf, "Unable to read from program: ");
166 strcat(buf, sys_errlist[errno]);
171 time_s = ctime(&foo)+4;
172 time_s[strlen(time_s)-6]='\0';
173 fprintf(log, "%s <%d> %s", time_s, pid, buf);