Code cosmetics
[mmh] / sbr / push.c
1 /*
2 ** push.c -- push a fork into the background
3 **
4 ** This code is Copyright (c) 2002, by the authors of nmh.  See the
5 ** COPYRIGHT file in the root directory of the nmh distribution for
6 ** complete copyright information.
7 */
8
9 #include <h/mh.h>
10 #include <h/signals.h>
11 #include <signal.h>
12
13
14 void
15 push(void)
16 {
17         pid_t pid;
18         int i;
19
20         for (i = 0; (pid = fork()) == -1 && i < 5; i++)
21                 sleep(5);
22
23         switch (pid) {
24                 case -1:
25                         /* fork error */
26                         advise(NULL, "unable to fork, so can't push...");
27                         break;
28
29                 case 0:
30                         /* child, block a few signals and continue */
31                         SIGNAL(SIGHUP, SIG_IGN);
32                         SIGNAL(SIGINT, SIG_IGN);
33                         SIGNAL(SIGQUIT, SIG_IGN);
34                         SIGNAL(SIGTERM, SIG_IGN);
35 #ifdef SIGTSTP
36                         SIGNAL(SIGTSTP, SIG_IGN);
37                         SIGNAL(SIGTTIN, SIG_IGN);
38                         SIGNAL(SIGTTOU, SIG_IGN);
39 #endif
40                         freopen("/dev/null", "r", stdin);
41                         freopen("/dev/null", "w", stdout);
42                         break;
43
44                 default:
45                         /* parent, just exit */
46                         done(0);
47         }
48 }