Add error checks and fork() call after setsid()
In order to start a daemon, a second call for fork() after changing session ID is usually required, in order to prevent acquiring a controlling tty when it eventually writes to one.
This commit is contained in:
parent
e4c67052ef
commit
06c238d486
30
timeoutd.c
30
timeoutd.c
|
@ -340,13 +340,37 @@ char *argv[];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If running in daemon mode (no parameters) */
|
/* If running in daemon mode (no parameters) */
|
||||||
if (fork()) /* the parent process */
|
pid_t pid;
|
||||||
exit(0); /* exits */
|
|
||||||
|
if ((pid = fork()) < 0) {
|
||||||
|
openlog("timeoutd", OPENLOG_FLAGS, LOG_DAEMON);
|
||||||
|
syslog(LOG_ERR, "Failed to execute fork number 1");
|
||||||
|
closelog();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if (pid > 0)
|
||||||
|
exit(0);
|
||||||
|
|
||||||
close(0);
|
close(0);
|
||||||
close(1);
|
close(1);
|
||||||
close(2);
|
close(2);
|
||||||
setsid();
|
if (setsid() < 0) {
|
||||||
|
openlog("timeoutd", OPENLOG_FLAGS, LOG_DAEMON);
|
||||||
|
syslog(LOG_ERR, "Failed to set new session ID at startup.");
|
||||||
|
closelog();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((pid = fork()) < 0) {
|
||||||
|
openlog("timeoutd", OPENLOG_FLAGS, LOG_DAEMON);
|
||||||
|
syslog(LOG_ERR, "Failed to execute fork number 2");
|
||||||
|
closelog();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if (pid > 0)
|
||||||
|
exit(0);
|
||||||
|
|
||||||
|
umask(0);
|
||||||
|
|
||||||
openlog("timeoutd", OPENLOG_FLAGS, LOG_DAEMON);
|
openlog("timeoutd", OPENLOG_FLAGS, LOG_DAEMON);
|
||||||
syslog(LOG_NOTICE, "Daemon started.");
|
syslog(LOG_NOTICE, "Daemon started.");
|
||||||
|
|
Loading…
Reference in a new issue