rbb 99/04/26 11:16:51
Modified: apr/threadproc/unix proc.c
docs threadproc.txt
include apr_thread_proc.h
Log:
New process function. Wait's for a process to die, and let's the caller
know the result.
Revision Changes Path
1.4 +17 -2 apache-apr/apr/threadproc/unix/proc.c
Index: proc.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/threadproc/unix/proc.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- proc.c 1999/04/26 15:35:18 1.3
+++ proc.c 1999/04/26 18:16:39 1.4
@@ -56,10 +56,11 @@
#include "apr_thread_proc.h"
#include "apr_file_io.h"
#include "apr_general.h"
-#include <string.h>
-#include <signal.h>
#include "threadproc.h"
#include "fileio.h"
+#include <signal.h>
+#include <string.h>
+#include <sys/wait.h>
apr_procattr_t *apr_createprocattr_init(void)
{
@@ -215,4 +216,18 @@
{
return proc->attr->parent_err;
}
+
+apr_status_t apr_wait_proc(apr_proc_t *proc, apr_wait_how_e wait)
+{
+ if (!proc)
+ return APR_FAILURE;
+ if (wait == APR_WAIT) {
+ if (waitpid(proc->pid, NULL, WUNTRACED) > 0)
+ return APR_SUCCESS;
+ return APR_FAILURE;
+ }
+ if (waitpid(proc->pid, NULL, WUNTRACED | WNOHANG) > 0)
+ return APR_SUCCESS;
+ return APR_FAILURE;
+}
1.7 +19 -9 apache-apr/docs/threadproc.txt
Index: threadproc.txt
===================================================================
RCS file: /home/cvs/apache-apr/docs/threadproc.txt,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- threadproc.txt 1999/04/26 17:22:30 1.6
+++ threadproc.txt 1999/04/26 18:16:44 1.7
@@ -15,7 +15,7 @@
specific default size.
return) The thread created.
-apr_int32_t apr_fork(apr_proc_t *)
+ apr_int32_t apr_fork(apr_proc_t *)
create a new process with a copy of the currently executing address
space.
Arguments:
arg 1) the proccess type for the newly created process. NULL on
error.
@@ -27,12 +27,12 @@
to produce this function should define it as NULL, so that there are
no compile time errors.
-apr_procattr_t *apr_createprocattr_init(void);
+ apr_procattr_t *apr_createprocattr_init(void);
create a new process attr type with OS dependant defaults
Arguments:
return) New process attribute type.
-apr_status_t apr_setprocattr_io(apr_procattr_t *, apr_int32_t, apr_int32_t,
apr_int32_t)
+ apr_status_t apr_setprocattr_io(apr_procattr_t *, apr_int32_t, apr_int32_t,
apr_int32_t)
setup stdin, stdout, and stderr attributes for the new proc
Arguments
arg 1) the process attr to modify
@@ -45,14 +45,14 @@
creates the pipe(s), but lets apr_create_process set them up as
std(in|out|err).
-apr_status_t apr_setprocattr_dir(apr_procattr_t *, char *)
+ apr_status_t apr_setprocattr_dir(apr_procattr_t *, char *)
define starting directory for new process.
Arguments
arg 1) The process attr to modify
arg 2) The starting directory for the new process.
return) APR_SUCCESS or APR_FAILURE
-apr_proc_t *apr_create_process(char *, char *const [], char **, const
apr_procattr_t *)
+ apr_proc_t *apr_create_process(char *, char *const [], char **, const
apr_procattr_t *)
create a new process and run a new executable in it.
Arguments:
arg 1) Path name of the executable file
@@ -64,7 +64,7 @@
process. If NULL, process will have the default attributes.
return) Process description structure. NULL on failure
-apr_file_t *apr_get_childin(apr_proc_t *)
+ apr_file_t *apr_get_childin(apr_proc_t *)
Get the parent side of the pipe that connects to the child's stdin.
This function is only valid after a process has successfully spawned
a child
@@ -73,7 +73,7 @@
return) The file to use when writing to the child's stdin. NULL
on error.
-apr_file_t *apr_get_childout(apr_proc_t *)
+ apr_file_t *apr_get_childout(apr_proc_t *)
Get the parent side of the pipe that connects to the child's stdout.
This function is only valid after a process has successfully spawned
a child
@@ -82,7 +82,7 @@
return) The file to use when reading from the child's stdout. NULL
on error.
-apr_file_t *apr_get_childerr(apr_proc_t *)
+ apr_file_t *apr_get_childerr(apr_proc_t *)
Get the parent side of the pipe that connects to the child's stderr.
This function is only valid after a process has successfully spawned
a child
@@ -91,6 +91,15 @@
return) The file to use when reading from the child's stderr. NULL
on error.
+ apr_status_t apr_wait_proc(apr_proc_t *, apr_wait_how_e)
+ Wait for a specified process to exit
+ Arguments:
+ arg 1) The process to wait for.
+ arg 2) wait for a process to die, or return immediately
+ APR_WAIT
+ APR_NOWAIT
+ return) APR_SUCCESS or APR_fAILURE
+
APRStatus apr_get_thread_private(APRUInt32, APThdPriv)
Get the thread private data for the current thread
Arguments:
@@ -116,5 +125,6 @@
struct apr_thread_t {
pthread_t td;
-
+ apr_procattr_t attr;
+}
1.3 +2 -0 apache-apr/include/apr_thread_proc.h
Index: apr_thread_proc.h
===================================================================
RCS file: /home/cvs/apache-apr/include/apr_thread_proc.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- apr_thread_proc.h 1999/04/26 15:35:19 1.2
+++ apr_thread_proc.h 1999/04/26 18:16:48 1.3
@@ -61,6 +61,7 @@
#include "apr_errno.h"
typedef enum {APR_SHELLCMD, APR_PROGRAM} apr_cmdtype_e;
+typedef enum {APR_WAIT, APR_NOWAIT} apr_wait_how_e;
typedef struct thread_t apr_thread_t;
typedef struct proc_t apr_proc_t;
@@ -78,6 +79,7 @@
apr_int32_t apr_fork(apr_proc_t *);
apr_proc_t *apr_create_process(char *, char *const [], char **,
apr_procattr_t *);
+apr_wait_proc(apr_proc_t *, apr_wait_how_e);
#endif /* ! APR_FILE_IO_H */