|  | 
 | /* | 
 |  * Copyright (C) Igor Sysoev | 
 |  */ | 
 |  | 
 |  | 
 | #ifndef _NGX_PROCESS_H_INCLUDED_ | 
 | #define _NGX_PROCESS_H_INCLUDED_ | 
 |  | 
 |  | 
 | typedef pid_t       ngx_pid_t; | 
 |  | 
 | typedef void (*ngx_spawn_proc_pt) (ngx_cycle_t *cycle, void *data); | 
 |  | 
 | typedef struct { | 
 |     ngx_pid_t           pid; | 
 |     int                 status; | 
 |     ngx_socket_t        channel[2]; | 
 |  | 
 |     ngx_spawn_proc_pt   proc; | 
 |     void               *data; | 
 |     char               *name; | 
 |  | 
 |     unsigned            respawn:1; | 
 |     unsigned            just_respawn:1; | 
 |     unsigned            detached:1; | 
 |     unsigned            exiting:1; | 
 |     unsigned            exited:1; | 
 | } ngx_process_t; | 
 |  | 
 |  | 
 | typedef struct { | 
 |     char         *path; | 
 |     char         *name; | 
 |     char *const  *argv; | 
 |     char *const  *envp; | 
 | } ngx_exec_ctx_t; | 
 |  | 
 |  | 
 | #define NGX_MAX_PROCESSES         1024 | 
 |  | 
 | #define NGX_PROCESS_NORESPAWN     -1 | 
 | #define NGX_PROCESS_RESPAWN       -2 | 
 | #define NGX_PROCESS_JUST_RESPAWN  -3 | 
 | #define NGX_PROCESS_DETACHED      -4 | 
 |  | 
 |  | 
 | #define ngx_getpid   getpid | 
 | #define ngx_log_pid  ngx_pid | 
 |  | 
 | ngx_pid_t ngx_spawn_process(ngx_cycle_t *cycle, | 
 |     ngx_spawn_proc_pt proc, void *data, char *name, ngx_int_t respawn); | 
 | ngx_pid_t ngx_execute(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx); | 
 | void ngx_process_get_status(void); | 
 | void ngx_debug_point(void); | 
 |  | 
 |  | 
 | #if (NGX_HAVE_SCHED_YIELD) | 
 | #define ngx_sched_yield()  sched_yield() | 
 | #else | 
 | #define ngx_sched_yield()  usleep(1) | 
 | #endif | 
 |  | 
 |  | 
 | extern int            ngx_argc; | 
 | extern char         **ngx_argv; | 
 | extern char         **ngx_os_argv; | 
 |  | 
 | extern ngx_pid_t      ngx_pid; | 
 | extern ngx_socket_t   ngx_channel; | 
 | extern ngx_int_t      ngx_process_slot; | 
 | extern ngx_int_t      ngx_last_process; | 
 | extern ngx_process_t  ngx_processes[NGX_MAX_PROCESSES]; | 
 |  | 
 |  | 
 | #endif /* _NGX_PROCESS_H_INCLUDED_ */ |