int main(int argc, const char *const argv[]) { size_t nthds = 8; ssize_t nputs = 1000LL * 1000LL * 10LL; pid_t c_pid; if (argc >= 2) { size_t n; if (lagopus_str_parse_int64(argv[1], (int64_t *)&n) == LAGOPUS_RESULT_OK) { if (n > 0) { nthds = (size_t)n; } } } if (argc >= 3) { ssize_t n; if (lagopus_str_parse_int64(argv[2], (int64_t *)&n) == LAGOPUS_RESULT_OK) { if (n > 0) { nputs = (ssize_t)n; } } } (void)lagopus_signal(SIGHUP, s_sighandler, NULL); (void)lagopus_signal(SIGINT, s_sighandler, NULL); c_pid = fork(); if (c_pid == 0) { is_child = true; return do_run(nthds, nputs); } else if (c_pid > 0) { int st; (void)waitpid(c_pid, &st, 0); return 0; } else { perror("fork"); return 1; } }
int main(int argc, const char *const argv[]) { lagopus_result_t st = LAGOPUS_RESULT_ANY_FAILURES; (void)lagopus_signal(SIGHUP, s_hup_handler, NULL); (void)lagopus_signal(SIGINT, s_term_handler, NULL); (void)lagopus_signal(SIGTERM, s_term_handler, NULL); (void)lagopus_signal(SIGQUIT, s_term_handler, NULL); parse_args(argc - 1, argv + 1); if (s_to > 0) { if ((st = lagopus_mainloop_set_shutdown_check_interval(s_to)) != LAGOPUS_RESULT_OK) { lagopus_perror(st); goto done; } } st = lagopus_mainloop(argc, argv, NULL, NULL, false, false, false); done: return (st == LAGOPUS_RESULT_OK) ? 0 : 1; }
int main(int argc, const char *const argv[]) { lagopus_log_destination_t dst = LAGOPUS_LOG_EMIT_TO_UNKNOWN; const char *logarg; char *p; uint16_t cur_debug_level = lagopus_log_get_debug_level(); int ipcfds[2]; ipcfds[0] = -1; ipcfds[1] = -1; s_progname = ((p = strrchr(argv[0], '/')) != NULL) ? ++p : argv[0]; parse_args(argc, argv); if (IS_VALID_STRING(s_logfile) == true) { dst = LAGOPUS_LOG_EMIT_TO_FILE; logarg = s_logfile; } else { dst = LAGOPUS_LOG_EMIT_TO_SYSLOG; logarg = s_progname; } /* * If the cur_debug_level > 0 the debug level is set by the lagopus * runtime so use it as is. */ (void)lagopus_log_initialize(dst, logarg, false, true, (cur_debug_level > 0) ? cur_debug_level : s_debug_level); (void)lagopus_signal(SIGHUP, s_hup_handler, NULL); (void)lagopus_signal(SIGINT, s_term_handler, NULL); (void)lagopus_signal(SIGTERM, s_term_handler, NULL); (void)lagopus_signal(SIGQUIT, s_term_handler, NULL); if (s_debug_level == 0) { pid_t pid = (pid_t)-1; if (pipe(ipcfds) != 0) { lagopus_perror(LAGOPUS_RESULT_POSIX_API_ERROR); return 1; } pid = fork(); if (pid > 0) { int exit_code; ssize_t st; (void)close(ipcfds[1]); if ((st = read(ipcfds[0], (void *)&exit_code, sizeof(int))) != sizeof(int)) { lagopus_perror(LAGOPUS_RESULT_POSIX_API_ERROR); return 1; } return exit_code; } else if (pid == 0) { s_daemonize(ipcfds[1]); if (lagopus_log_get_destination() == LAGOPUS_LOG_EMIT_TO_FILE) { (void)lagopus_log_reinitialize(); } } else { lagopus_perror(LAGOPUS_RESULT_POSIX_API_ERROR); lagopus_msg_error("can' be a daemon.\n"); return 1; } } return s_do_main(argc, argv, ipcfds[1]); }