Blob Blame History Raw
diff -up at-3.1.11/atd.8.in.dont_fork at-3.1.11/atd.8.in
--- at-3.1.11/atd.8.in.dont_fork	2009-08-14 18:49:05.000000000 +0200
+++ at-3.1.11/atd.8.in	2009-10-01 13:03:18.799878107 +0200
@@ -1,4 +1,4 @@
-.TH ATD 8 "Mar 1997" local "Linux Programmer's Manual"
+.TH ATD 8 "Sep 2009" at-3.1.11 "Linux Programmer's Manual"
 .SH NAME
 atd \- run jobs queued for later execution
 .SH SYNOPSIS
@@ -9,6 +9,7 @@ atd \- run jobs queued for later executi
 .IR batch_interval ]
 .RB [ -d ]
 .RB [ -s ]
+.RB [ -n ]
 .SH DESCRIPTION
 .B atd
 runs jobs queued by
@@ -45,6 +46,9 @@ A script invoking
 is installed as
 .B @prefix@/sbin/atrun
 for backward compatibility.
++.TP 8
++.B -n
++Don't fork option.
 .SH WARNING
 .B atd
 won't work if its spool directory is mounted via NFS even if
diff -up at-3.1.11/atd.c.dont_fork at-3.1.11/atd.c
--- at-3.1.11/atd.c.dont_fork	2009-10-01 13:03:18.000000000 +0200
+++ at-3.1.11/atd.c	2009-10-01 13:04:55.289631298 +0200
@@ -729,7 +729,7 @@ main(int argc, char *argv[])
     run_as_daemon = 1;
     batch_interval = BATCH_INTERVAL_DEFAULT;
 
-    while ((c = getopt(argc, argv, "sdl:b:")) != EOF) {
+    while ((c = getopt(argc, argv, "sdl:b:n")) != EOF) {
 	switch (c) {
 	case 'l':
 	    if (sscanf(optarg, "%lf", &load_avg) != 1)
@@ -744,7 +744,10 @@ main(int argc, char *argv[])
 	    break;
 	case 'd':
 	    daemon_debug++;
-	    break;
+        /* go through another option*/
+   case 'n':
+        daemon_nofork++;
+        break;
 
 	case 's':
 	    run_as_daemon = 0;
diff -up at-3.1.11/daemon.c.dont_fork at-3.1.11/daemon.c
--- at-3.1.11/daemon.c.dont_fork	2009-08-14 18:49:05.000000000 +0200
+++ at-3.1.11/daemon.c	2009-10-01 13:03:18.800878165 +0200
@@ -48,7 +48,8 @@
 #include "daemon.h"
 #include "privs.h"
 
-int daemon_debug;
+int daemon_debug = 0;
+int daemon_nofork = 0;
 
 static int
 lock_fd(int fd)
@@ -117,15 +118,18 @@ daemon_setup()
 	    (open("/dev/null", O_RDWR) != 2)) {
 	    perr("Error redirecting I/O");
 	}
+    }
+    if (daemon_nofork) pid = getpid();
+    else {
 	pid = fork();
 	if (pid == -1) {
 	    perr("Cannot fork");
 	} else if (pid != 0) {
 	    exit(0);
 	}
+	(void) setsid();
     }
     old_umask = umask(S_IWGRP | S_IWOTH);
-    (void) setsid();
 
     PRIV_START
 
diff -up at-3.1.11/daemon.h.dont_fork at-3.1.11/daemon.h
--- at-3.1.11/daemon.h.dont_fork	2009-08-14 18:49:05.000000000 +0200
+++ at-3.1.11/daemon.h	2009-10-01 13:03:18.801877593 +0200
@@ -14,3 +14,4 @@ __attribute__((noreturn))
 perr (const char *fmt, ...);
 
 extern int daemon_debug;
+extern int daemon_nofork;