diff --git a/src/pcu_main.cpp b/src/pcu_main.cpp index 7480842d..fe851600 100644 --- a/src/pcu_main.cpp +++ b/src/pcu_main.cpp @@ -60,6 +60,7 @@ void *tall_pcu_ctx = NULL; extern void *bv_tall_ctx; static int quit = 0; static int rt_prio = -1; +static bool daemonize = false; static const char *gsmtap_addr = "localhost"; // FIXME: use gengetopt's default value instead static void print_help() @@ -75,6 +76,8 @@ static void print_help() " -V --version print version\n" " -r --realtime PRIO Use SCHED_RR with the specified " "priority\n" + " -D --daemonize Fork the process into a background" + "daemon\n" " -i --gsmtap-ip The destination IP used for GSMTAP.\n" ); } @@ -91,12 +94,13 @@ static void handle_options(int argc, char **argv) { "mnc", 1, 0, 'n' }, { "version", 0, 0, 'V' }, { "realtime", 1, 0, 'r' }, + { "daemonize", 0, 0, 'D' }, { "exit", 0, 0, 'e' }, { "gsmtap-ip", 1, 0, 'i' }, { 0, 0, 0, 0 } }; - c = getopt_long(argc, argv, "hc:m:n:Vr:e:i:", + c = getopt_long(argc, argv, "hc:m:n:Vr:De:i:", long_options, &option_idx); if (c == -1) break; @@ -130,6 +134,9 @@ static void handle_options(int argc, char **argv) case 'r': rt_prio = atoi(optarg); break; + case 'D': + daemonize = true; + break; case 'e': fprintf(stderr, "Warning: Option '-e' is deprecated!\n"); break; @@ -329,6 +336,14 @@ int main(int argc, char *argv[]) } } + if (daemonize) { + rc = osmo_daemonize(); + if (rc < 0) { + perror("Error during daemonize"); + exit(1); + } + } + while (!quit) { osmo_gsm_timers_check(); osmo_gsm_timers_prepare();