diff options
Diffstat (limited to 'threadproc/unix')
-rw-r--r-- | threadproc/unix/proc.c | 8 | ||||
-rw-r--r-- | threadproc/unix/procsup.c | 24 |
2 files changed, 18 insertions, 14 deletions
diff --git a/threadproc/unix/proc.c b/threadproc/unix/proc.c index ff80f2cfe..deb188a58 100644 --- a/threadproc/unix/proc.c +++ b/threadproc/unix/proc.c @@ -362,26 +362,26 @@ APR_DECLARE(apr_status_t) apr_proc_create(apr_proc_t *new, const char *progname, } newargs[i + 2] = NULL; if (attr->detached) { - apr_proc_detach(); + apr_proc_detach(APR_PROC_DETACH_DAEMONIZE); } execve(SHELL_PATH, (char * const *) newargs, (char * const *)env); } else if (attr->cmdtype == APR_PROGRAM) { if (attr->detached) { - apr_proc_detach(); + apr_proc_detach(APR_PROC_DETACH_DAEMONIZE); } execve(progname, (char * const *)args, (char * const *)env); } else if (attr->cmdtype == APR_PROGRAM_ENV) { if (attr->detached) { - apr_proc_detach(); + apr_proc_detach(APR_PROC_DETACH_DAEMONIZE); } execv(progname, (char * const *)args); } else { /* APR_PROGRAM_PATH */ if (attr->detached) { - apr_proc_detach(); + apr_proc_detach(APR_PROC_DETACH_DAEMONIZE); } execvp(progname, (char * const *)args); } diff --git a/threadproc/unix/procsup.c b/threadproc/unix/procsup.c index b96cb48ec..391f803bd 100644 --- a/threadproc/unix/procsup.c +++ b/threadproc/unix/procsup.c @@ -54,24 +54,28 @@ #include "threadproc.h" -APR_DECLARE(apr_status_t) apr_proc_detach(void) +APR_DECLARE(apr_status_t) apr_proc_detach(int daemonize) { int x; pid_t pgrp; chdir("/"); #if !defined(MPE) && !defined(OS2) && !defined(TPF) && !defined(BEOS) -/* Don't detach for MPE because child processes can't survive the death of - the parent. */ - if ((x = fork()) > 0) - exit(0); - else if (x == -1) { - perror("fork"); - fprintf(stderr, "unable to fork new process\n"); - exit(1); /* we can't do anything here, so just exit. */ + /* Don't detach for MPE because child processes can't survive the death of + * the parent. */ + if (daemonize) { + if ((x = fork()) > 0) { + exit(0); + } + else if (x == -1) { + perror("fork"); + fprintf(stderr, "unable to fork new process\n"); + exit(1); /* we can't do anything here, so just exit. */ + } + /* RAISE_SIGSTOP(DETACH); */ } -/* RAISE_SIGSTOP(DETACH);*/ #endif + #ifdef HAVE_SETSID if ((pgrp = setsid()) == -1) { return errno; |