Added support for daemonize to osmo-pcu.

Change-Id: Ia889544e0a350b6bab55da4e4201a617e0241ea2
diff --git a/src/pcu_main.cpp b/src/pcu_main.cpp
index 7480842..fe85160 100644
--- a/src/pcu_main.cpp
+++ b/src/pcu_main.cpp
@@ -60,6 +60,7 @@
 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 @@
 		"  -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 @@
 			{ "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 @@
 		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 @@
 		}
 	}
 
+	if (daemonize) {
+		rc = osmo_daemonize();
+		if (rc < 0) {
+			perror("Error during daemonize");
+			exit(1);
+		}
+	}
+
 	while (!quit) {
 		osmo_gsm_timers_check();
 		osmo_gsm_timers_prepare();