00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "apr_arch_threadproc.h"
00018
00019 apr_status_t apr_proc_detach(int daemonize)
00020 {
00021 #if 0
00022 int x;
00023 pid_t pgrp;
00024
00025 chdir("/");
00026 #if !defined(MPE) && !defined(OS2) && !defined(TPF) && !defined(BEOS)
00027
00028
00029 if ((x = fork()) > 0)
00030 exit(0);
00031 else if (x == -1) {
00032 perror("fork");
00033 fprintf(stderr, "unable to fork new process\n");
00034 exit(1);
00035 }
00036
00037 #endif
00038 #if APR_HAVE_SETSID
00039 if ((pgrp = setsid()) == -1) {
00040 return errno;
00041 }
00042 #elif defined(NEXT) || defined(NEWSOS)
00043 if (setpgrp(0, getpid()) == -1 || (pgrp = getpgrp(0)) == -1) {
00044 return errno;
00045 }
00046 #elif defined(OS2) || defined(TPF)
00047
00048 pgrp = getpid();
00049 #elif defined(MPE)
00050
00051 pgrp = -getpid();
00052 #else
00053 if ((pgrp = setpgid(0, 0)) == -1) {
00054 return errno;
00055 }
00056 #endif
00057
00058
00059 if (freopen("/dev/null", "r", stdin) == NULL) {
00060 return errno;
00061
00062
00063
00064
00065
00066 }
00067 if (freopen("/dev/null", "w", stdout) == NULL) {
00068 return errno;
00069 }
00070
00071
00072
00073
00074 if (freopen("/dev/null", "w", stderr) == NULL) {
00075 return errno;
00076 }
00077 #endif
00078 return APR_SUCCESS;
00079 }
00080
00081 #if 0
00082 #if (!HAVE_WAITPID)
00083
00084
00085
00086
00087
00088 int waitpid(pid_t pid, int *statusp, int options)
00089 {
00090 int tmp_pid;
00091 if (kill(pid, 0) == -1) {
00092 errno = ECHILD;
00093 return -1;
00094 }
00095 while (((tmp_pid = wait3(statusp, options, 0)) != pid) &&
00096 (tmp_pid != -1) && (tmp_pid != 0) && (pid != -1))
00097 ;
00098 return tmp_pid;
00099 }
00100 #endif
00101 #endif
00102