⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 apr_thread_proc.h

📁 apache的软件linux版本
💻 H
📖 第 1 页 / 共 3 页
字号:
/* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */#ifndef APR_THREAD_PROC_H#define APR_THREAD_PROC_H/** * @file apr_thread_proc.h * @brief APR Thread and Process Library */#include "apr.h"#include "apr_file_io.h"#include "apr_pools.h"#include "apr_errno.h"#if APR_HAVE_STRUCT_RLIMIT#include <sys/time.h>#include <sys/resource.h>#endif#ifdef __cplusplusextern "C" {#endif /* __cplusplus *//** * @defgroup apr_thread_proc Threads and Process Functions * @ingroup APR  * @{ */typedef enum {    APR_SHELLCMD,       /**< use the shell to invoke the program */    APR_PROGRAM,        /**< invoke the program directly, no copied env */    APR_PROGRAM_ENV,    /**< invoke the program, replicating our environment */    APR_PROGRAM_PATH,   /**< find program on PATH, use our environment */    APR_SHELLCMD_ENV    /**< use the shell to invoke the program,                          *   replicating our environment                          */} apr_cmdtype_e;typedef enum {    APR_WAIT,           /**< wait for the specified process to finish */    APR_NOWAIT          /**< do not wait -- just see if it has finished */} apr_wait_how_e;/* I am specifically calling out the values so that the macros below make * more sense.  Yes, I know I don't need to, but I am hoping this makes what * I am doing more clear.  If you want to add more reasons to exit, continue * to use bitmasks. */typedef enum {    APR_PROC_EXIT = 1,          /**< process exited normally */    APR_PROC_SIGNAL = 2,        /**< process exited due to a signal */    APR_PROC_SIGNAL_CORE = 4    /**< process exited and dumped a core file */} apr_exit_why_e;/** did we exit the process */#define APR_PROC_CHECK_EXIT(x)        (x & APR_PROC_EXIT)/** did we get a signal */#define APR_PROC_CHECK_SIGNALED(x)    (x & APR_PROC_SIGNAL)/** did we get core */#define APR_PROC_CHECK_CORE_DUMP(x)   (x & APR_PROC_SIGNAL_CORE)/** @see apr_procattr_io_set */#define APR_NO_PIPE          0/** @see apr_procattr_io_set */#define APR_FULL_BLOCK       1/** @see apr_procattr_io_set */#define APR_FULL_NONBLOCK    2/** @see apr_procattr_io_set */#define APR_PARENT_BLOCK     3/** @see apr_procattr_io_set */#define APR_CHILD_BLOCK      4/** @see apr_procattr_limit_set */#define APR_LIMIT_CPU        0/** @see apr_procattr_limit_set */#define APR_LIMIT_MEM        1/** @see apr_procattr_limit_set */#define APR_LIMIT_NPROC      2/** @see apr_procattr_limit_set */#define APR_LIMIT_NOFILE     3/** * @defgroup APR_OC Other Child Flags * @{ */#define APR_OC_REASON_DEATH         0     /**< child has died, caller must call                                           * unregister still */#define APR_OC_REASON_UNWRITABLE    1     /**< write_fd is unwritable */#define APR_OC_REASON_RESTART       2     /**< a restart is occuring, perform                                           * any necessary cleanup (including                                           * sending a special signal to child)                                           */#define APR_OC_REASON_UNREGISTER    3     /**< unregister has been called, do                                           * whatever is necessary (including                                           * kill the child) */#define APR_OC_REASON_LOST          4     /**< somehow the child exited without                                           * us knowing ... buggy os? */#define APR_OC_REASON_RUNNING       5     /**< a health check is occuring,                                            * for most maintainence functions                                           * this is a no-op.                                           *//** @} *//** The APR process type */typedef struct apr_proc_t {    /** The process ID */    pid_t pid;    /** Parent's side of pipe to child's stdin */    apr_file_t *in;    /** Parent's side of pipe to child's stdout */    apr_file_t *out;    /** Parent's side of pipe to child's stdouterr */    apr_file_t *err;#if APR_HAS_PROC_INVOKED || defined(DOXYGEN)    /** Diagnositics/debugging string of the command invoked for      *  this process [only present if APR_HAS_PROC_INVOKED is true]     * @remark Only enabled on Win32 by default.     * @bug This should either always or never be present in release     * builds - since it breaks binary compatibility.  We may enable     * it always in APR 1.0 yet leave it undefined in most cases.     */    char *invoked;#endif#if defined(WIN32) || defined(DOXYGEN)    /** (Win32 only) Creator's handle granting access to the process     * @remark This handle is closed and reset to NULL in every case     * corresponding to a waitpid() on Unix which returns the exit status.     * Therefore Win32 correspond's to Unix's zombie reaping characteristics     * and avoids potential handle leaks.     */    HANDLE hproc;#endif} apr_proc_t;/** * The prototype for APR child errfn functions.  (See the description * of apr_procattr_child_errfn_set() for more information.) * It is passed the following parameters: * @param pool Pool associated with the apr_proc_t.  If your child *             error function needs user data, associate it with this *             pool. * @param err APR error code describing the error * @param description Text description of type of processing which failed */typedef void (apr_child_errfn_t)(apr_pool_t *proc, apr_status_t err,                                 const char *description);/** Opaque Thread structure. */typedef struct apr_thread_t           apr_thread_t;/** Opaque Thread attributes structure. */typedef struct apr_threadattr_t       apr_threadattr_t;/** Opaque Process attributes structure. */typedef struct apr_procattr_t         apr_procattr_t;/** Opaque control variable for one-time atomic variables.  */typedef struct apr_thread_once_t      apr_thread_once_t;/** Opaque thread private address space. */typedef struct apr_threadkey_t        apr_threadkey_t;/** Opaque record of child process. */typedef struct apr_other_child_rec_t  apr_other_child_rec_t;/** * The prototype for any APR thread worker functions. */typedef void *(APR_THREAD_FUNC *apr_thread_start_t)(apr_thread_t*, void*);typedef enum {    APR_KILL_NEVER,             /**< process is never sent any signals */    APR_KILL_ALWAYS,            /**< process is sent SIGKILL on apr_pool_t cleanup */    APR_KILL_AFTER_TIMEOUT,     /**< SIGTERM, wait 3 seconds, SIGKILL */    APR_JUST_WAIT,              /**< wait forever for the process to complete */    APR_KILL_ONLY_ONCE          /**< send SIGTERM and then wait */} apr_kill_conditions_e;/* Thread Function definitions */#if APR_HAS_THREADS/** * Create and initialize a new threadattr variable * @param new_attr The newly created threadattr. * @param cont The pool to use */APR_DECLARE(apr_status_t) apr_threadattr_create(apr_threadattr_t **new_attr,                                                 apr_pool_t *cont);/** * Set if newly created threads should be created in detached state. * @param attr The threadattr to affect  * @param on Thread detach state on or off */APR_DECLARE(apr_status_t) apr_threadattr_detach_set(apr_threadattr_t *attr,                                                    apr_int32_t on);/** * Get the detach state for this threadattr. * @param attr The threadattr to reference  */APR_DECLARE(apr_status_t) apr_threadattr_detach_get(apr_threadattr_t *attr);/** * Set the stack size of newly created threads. * @param attr The threadattr to affect  * @param stacksize The stack size in bytes */APR_DECLARE(apr_status_t) apr_threadattr_stacksize_set(apr_threadattr_t *attr,                                                       apr_size_t stacksize);/** * Create a new thread of execution * @param new_thread The newly created thread handle. * @param attr The threadattr to use to determine how to create the thread * @param func The function to start the new thread in * @param data Any data to be passed to the starting function * @param cont The pool to use */APR_DECLARE(apr_status_t) apr_thread_create(apr_thread_t **new_thread,                                             apr_threadattr_t *attr,                                             apr_thread_start_t func,                                             void *data, apr_pool_t *cont);/** * stop the current thread * @param thd The thread to stop * @param retval The return value to pass back to any thread that cares */APR_DECLARE(apr_status_t) apr_thread_exit(apr_thread_t *thd,                                           apr_status_t retval);/** * block until the desired thread stops executing. * @param retval The return value from the dead thread. * @param thd The thread to join */APR_DECLARE(apr_status_t) apr_thread_join(apr_status_t *retval,                                           apr_thread_t *thd); 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -