]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Add daemon logic
authorNick Mathewson <nickm@torproject.org>
Mon, 17 Mar 2003 02:41:36 +0000 (02:41 +0000)
committerNick Mathewson <nickm@torproject.org>
Mon, 17 Mar 2003 02:41:36 +0000 (02:41 +0000)
svn:r185

src/or/main.c

index fe2de2ebc1fb8416e7d7da3014e98cc1712180ab..fc310424fd467b3fa90122dd4751d81a1dba7356 100644 (file)
@@ -607,6 +607,24 @@ void dump_directory_to_string(char *s, int maxlen) {
 
 }
 
+void daemonize() {
+  /* Fork; parent exits. */
+  if (fork())
+    exit(0);
+
+  /* Create new session; make sure we never get a terminal */
+  setsid();
+  if (fork())
+    exit(0);
+
+  chdir("/");
+  umask(000);
+
+  fclose(stdin);
+  fclose(stdout);
+  fclose(stderr);
+}
+
 int main(int argc, char *argv[]) {
   int retval = 0;
 
@@ -615,6 +633,9 @@ int main(int argc, char *argv[]) {
   log(options.loglevel,NULL);         /* assign logging severity level from options */
   global_role = options.Role;   /* assign global_role from options. FIXME: remove from global namespace later. */
 
+  if (options.Daemon)
+    daemonize();
+
   if(options.Role & ROLE_OR_LISTEN) { /* only spawn dns handlers if we're a router */
     if(dns_master_start() < 0) {
       log(LOG_ERR,"main(): We're running without a dns handler. Bad news.");