- Improve error handling when daemonizing
This commit is contained in:
parent
7506f09907
commit
01d25ecb39
16
ifstatd.c
16
ifstatd.c
@ -197,6 +197,7 @@ daemon_start()
|
|||||||
struct sigaction sig_action;
|
struct sigaction sig_action;
|
||||||
sigset_t sig_set;
|
sigset_t sig_set;
|
||||||
pid_t otherpid;
|
pid_t otherpid;
|
||||||
|
int curPID;
|
||||||
|
|
||||||
tot = &ift;
|
tot = &ift;
|
||||||
|
|
||||||
@ -218,10 +219,18 @@ daemon_start()
|
|||||||
}
|
}
|
||||||
warn("Cannot open or create pidfile: %s", pid_filename);
|
warn("Cannot open or create pidfile: %s", pid_filename);
|
||||||
}
|
}
|
||||||
/* fork ourselves if not asked otherwise */
|
/* start daemonizing */
|
||||||
if (fork()) {
|
curPID = fork();
|
||||||
|
|
||||||
|
switch (curPID) {
|
||||||
|
case 0: /* This process is the child */
|
||||||
|
break;
|
||||||
|
case -1: /* fork() failed, should exit */
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
default: /* fork() successful, should exit */
|
||||||
return (EXIT_SUCCESS);
|
return (EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we are the child, complete the daemonization */
|
/* we are the child, complete the daemonization */
|
||||||
|
|
||||||
/* Close standard IO */
|
/* Close standard IO */
|
||||||
@ -250,7 +259,8 @@ daemon_start()
|
|||||||
sigaction(SIGINT, &sig_action, NULL);
|
sigaction(SIGINT, &sig_action, NULL);
|
||||||
|
|
||||||
/* create new session and process group */
|
/* create new session and process group */
|
||||||
setsid();
|
if (setsid() < 0)
|
||||||
|
return (EXIT_FAILURE);
|
||||||
|
|
||||||
/* persist pid */
|
/* persist pid */
|
||||||
pidfile_write(pfh);
|
pidfile_write(pfh);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user