/**
+ * Try to run in daemon mode if enabled in config.
+ * @param daemon_mode True if process should detach to init (run as daemon), false if not detach to init.
+ * @return 0 if all is fine, -1 on error.
+ */
+int init_daemon_mode(bool daemon_mode)
+{
+ updater->get_logger()->print_daemon_mode(daemon_mode);
+ if ( daemon_mode == true )
+ {
+ int pid = fork();
+ if ( pid < 0 )
+ {
+ // error fork
+ updater->get_logger()->print_error_fork();
+ return -1;
+ }
+ else if ( pid > 0 )
+ {
+ // parent continues here
+ if ( write_pidfile(pid) != 0 )
+ {
+ if ( kill(pid,SIGTERM) != 0 )
+ updater->get_logger()->print_error_kill_child(pid);
+ else
+ updater->get_logger()->print_child_killed(pid);
+ exit(-1);
+ }
+ updater->get_logger()->print_runnig_as_daemon(pid);
+ exit(0);
+ }
+ // child starts here
+ }
+ return 0;
+}
+
+/**
* @brief The main part.
* @param argc Number of arguments
* @param argv Command line arguments
if ( init_signals() != 0)
return -1;
- // initialize daemon mode if configured TODO: into separate function
- updater->get_logger()->print_daemon_mode(updater->get_config()->get_daemon_mode());
- if ( updater->get_config()->get_daemon_mode() == 1 )
- {
- int pid = fork();
- if ( pid < 0 )
- {
- // error fork
- updater->get_logger()->print_error_fork();
- return -1;
- }
- else if ( pid > 0 )
- {
- // parent
- if ( write_pidfile(pid) != 0 )
- {
- if ( kill(pid,SIGTERM) != 0 )
- updater->get_logger()->print_error_kill_child(pid);
- return -1;
- }
- updater->get_logger()->print_runnig_as_daemon(pid);
- return 0;
- }
- // child starts here
- }
+ // init daemon_mode if enabled
+ if ( init_daemon_mode(updater->get_config()->get_daemon_mode()) != 0 )
+ return -1;
// service processing starts here
do
}
if ( updater->get_config()->get_daemon_mode() == 1 )
- sleep(10); // TODO: in a final release, correct the sleep value to something suitable
+ sleep(5);
}while ( updater->get_config()->get_daemon_mode() == 1 );