aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/pcu_main.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/pcu_main.cpp b/src/pcu_main.cpp
index 7480842d..f421e934 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 int daemonize = 0;
static const char *gsmtap_addr = "localhost"; // FIXME: use gengetopt's default value instead
static void print_help()
@@ -75,6 +76,7 @@ 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 +93,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 +133,9 @@ static void handle_options(int argc, char **argv)
case 'r':
rt_prio = atoi(optarg);
break;
+ case 'D':
+ daemonize = 1;
+ break;
case 'e':
fprintf(stderr, "Warning: Option '-e' is deprecated!\n");
break;
@@ -329,6 +335,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();