1 2 /* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) Nginx, Inc. 5 */ 6 7 8 #ifndef _NGX_PROCESS_H_INCLUDED_ 9 #define _NGX_PROCESS_H_INCLUDED_ 10 11 12 #include <ngx_setaffinity.h> 13 #include <ngx_setproctitle.h> 14 15 16 typedef pid_t ngx_pid_t; 17 18 #define NGX_INVALID_PID -1 19 20 typedef void (*ngx_spawn_proc_pt) (ngx_cycle_t *cycle, void *data); 21 22 typedef struct { 23 ngx_pid_t pid; 24 int status; 25 ngx_socket_t channel[2]; 26 27 ngx_spawn_proc_pt proc; 28 void *data; 29 char *name; 30 31 unsigned respawn:1; 32 unsigned just_spawn:1; 33 unsigned detached:1; 34 unsigned exiting:1; 35 unsigned exited:1; 36 } ngx_process_t; 37 38 39 typedef struct { 40 char *path; 41 char *name; 42 char *const *argv; 43 char *const *envp; 44 } ngx_exec_ctx_t; 45 46 47 #define NGX_MAX_PROCESSES 1024 48 49 #define NGX_PROCESS_NORESPAWN -1 50 #define NGX_PROCESS_JUST_SPAWN -2 51 #define NGX_PROCESS_RESPAWN -3 52 #define NGX_PROCESS_JUST_RESPAWN -4 53 #define NGX_PROCESS_DETACHED -5 54 55 56 #define ngx_getpid getpid 57 #define ngx_getppid getppid 58 59 #ifndef ngx_log_pid 60 #define ngx_log_pid ngx_pid 61 #endif 62 63 64 ngx_pid_t ngx_spawn_process(ngx_cycle_t *cycle, 65 ngx_spawn_proc_pt proc, void *data, char *name, ngx_int_t respawn); 66 ngx_pid_t ngx_execute(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx); 67 ngx_int_t ngx_init_signals(ngx_log_t *log); 68 void ngx_debug_point(void); 69 70 71 #if (NGX_HAVE_SCHED_YIELD) 72 #define ngx_sched_yield() sched_yield() 73 #else 74 #define ngx_sched_yield() usleep(1) 75 #endif 76 77 78 extern int ngx_argc; 79 extern char **ngx_argv; 80 extern char **ngx_os_argv; 81 82 extern ngx_pid_t ngx_pid; 83 extern ngx_pid_t ngx_parent; 84 extern ngx_socket_t ngx_channel; 85 extern ngx_int_t ngx_process_slot; 86 extern ngx_int_t ngx_last_process; 87 extern ngx_process_t ngx_processes[NGX_MAX_PROCESSES]; 88 89 90 #endif /* _NGX_PROCESS_H_INCLUDED_ */ 91