diff options
author | Aaron Bannert <aaron@apache.org> | 2002-02-21 18:45:07 +0000 |
---|---|---|
committer | Aaron Bannert <aaron@apache.org> | 2002-02-21 18:45:07 +0000 |
commit | 2d0871e8b363db23b86b493d99b51e416baf85db (patch) | |
tree | 9d62a3c030f4ed39631c4e85930e1de08d07c6ed /threadproc/unix/proc.c | |
parent | 8078b110e1b3c579377327cc7cd0eb600c7a4096 (diff) | |
download | apr-2d0871e8b363db23b86b493d99b51e416baf85db.tar.gz apr-2d0871e8b363db23b86b493d99b51e416baf85db.zip |
Change apr_proc_detach to take a parameter that can enable/disable automatic
forking (aka, to "daemonize").
Detailed explanation: If we are only interested in detaching from the
controlling terminal, then we are only interested in creating a new
process group (or creating a new session, which implicitly creates a
new process group). In order to do so, we must _NOT_ already be
a process group leader. The only way to ensure that is true, we normally
will call fork() and allow the parent to exit, ensuring that the child
is at least a child of a process group leader (and not one itself).
Doing this by default prevents some process-watching tools from working
with Apache. Therefore, when calling apr_proc_detach with
APR_PROC_DETACH_FOREGROUND, the caller is taking responsibility
for _NOT_ being a process group leader, which is guaranteed by
such process management tools.
[A similiar patch was originally submitted Jos and later modifed by Aaron.]
Obtained from: Jos Backus <josb@cncdsl.com>
Submitted by: Aaron Bannert
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@63044 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'threadproc/unix/proc.c')
-rw-r--r-- | threadproc/unix/proc.c | 8 |
1 files changed, 4 insertions, 4 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); } |