Deleted
Added
nxt_process.h (320:d385755599d6) | nxt_process.h (341:5e1a9c009968) |
---|---|
1 2/* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7#ifndef _NXT_PROCESS_H_INCLUDED_ 8#define _NXT_PROCESS_H_INCLUDED_ 9 10 11typedef pid_t nxt_pid_t; 12typedef uid_t nxt_uid_t; 13typedef gid_t nxt_gid_t; 14 15 16typedef struct { 17 const char *user; 18 nxt_uid_t uid; 19 nxt_gid_t base_gid; 20 nxt_uint_t ngroups; 21 nxt_gid_t *gids; 22} nxt_user_cred_t; 23 24typedef struct nxt_process_init_s nxt_process_init_t; 25typedef nxt_int_t (*nxt_process_start_t)(nxt_task_t *task, void *data); 26 27 28struct nxt_process_init_s { 29 nxt_process_start_t start; 30 const char *name; 31 nxt_user_cred_t *user_cred; 32 33 nxt_port_handlers_t *port_handlers; 34 const nxt_sig_event_t *signals; 35 36 nxt_process_type_t type; 37 38 void *data; 39 uint32_t stream; 40 41 nxt_bool_t restart; 42}; 43 44 45typedef struct { 46 nxt_pid_t pid; 47 nxt_queue_t ports; /* of nxt_port_t */ 48 nxt_bool_t ready; 49 nxt_bool_t registered; 50 nxt_uint_t port_cleanups; 51 52 nxt_process_init_t *init; 53 54 nxt_thread_mutex_t incoming_mutex; 55 nxt_array_t *incoming; /* of nxt_port_mmap_t */ 56 57 nxt_thread_mutex_t outgoing_mutex; 58 nxt_array_t *outgoing; /* of nxt_port_mmap_t */ 59 60 nxt_thread_mutex_t cp_mutex; | 1 2/* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7#ifndef _NXT_PROCESS_H_INCLUDED_ 8#define _NXT_PROCESS_H_INCLUDED_ 9 10 11typedef pid_t nxt_pid_t; 12typedef uid_t nxt_uid_t; 13typedef gid_t nxt_gid_t; 14 15 16typedef struct { 17 const char *user; 18 nxt_uid_t uid; 19 nxt_gid_t base_gid; 20 nxt_uint_t ngroups; 21 nxt_gid_t *gids; 22} nxt_user_cred_t; 23 24typedef struct nxt_process_init_s nxt_process_init_t; 25typedef nxt_int_t (*nxt_process_start_t)(nxt_task_t *task, void *data); 26 27 28struct nxt_process_init_s { 29 nxt_process_start_t start; 30 const char *name; 31 nxt_user_cred_t *user_cred; 32 33 nxt_port_handlers_t *port_handlers; 34 const nxt_sig_event_t *signals; 35 36 nxt_process_type_t type; 37 38 void *data; 39 uint32_t stream; 40 41 nxt_bool_t restart; 42}; 43 44 45typedef struct { 46 nxt_pid_t pid; 47 nxt_queue_t ports; /* of nxt_port_t */ 48 nxt_bool_t ready; 49 nxt_bool_t registered; 50 nxt_uint_t port_cleanups; 51 52 nxt_process_init_t *init; 53 54 nxt_thread_mutex_t incoming_mutex; 55 nxt_array_t *incoming; /* of nxt_port_mmap_t */ 56 57 nxt_thread_mutex_t outgoing_mutex; 58 nxt_array_t *outgoing; /* of nxt_port_mmap_t */ 59 60 nxt_thread_mutex_t cp_mutex; |
61 nxt_mp_t *cp_mem_pool; | |
62 nxt_lvlhsh_t connected_ports; /* of nxt_port_t */ 63} nxt_process_t; 64 65 66NXT_EXPORT nxt_pid_t nxt_process_create(nxt_task_t *task, 67 nxt_process_t *process); 68NXT_EXPORT nxt_pid_t nxt_process_execute(nxt_task_t *task, char *name, 69 char **argv, char **envp); 70NXT_EXPORT nxt_int_t nxt_process_daemon(nxt_task_t *task); 71NXT_EXPORT void nxt_nanosleep(nxt_nsec_t ns); 72 73NXT_EXPORT void nxt_process_arguments(nxt_task_t *task, char **orig_argv, 74 char ***orig_envp); 75 76#define nxt_process_port_remove(port) \ 77 nxt_queue_remove(&port->link) 78 79#define nxt_process_port_first(process) \ 80 nxt_queue_link_data(nxt_queue_first(&process->ports), nxt_port_t, link) 81 82NXT_EXPORT void nxt_process_port_add(nxt_task_t *task, nxt_process_t *process, 83 nxt_port_t *port); 84 85#define nxt_process_port_each(process, port) \ 86 nxt_queue_each(port, &process->ports, nxt_port_t, link) 87 88#define nxt_process_port_loop \ 89 nxt_queue_loop 90 91 92void nxt_process_connected_port_add(nxt_process_t *process, nxt_port_t *port); 93 94void nxt_process_connected_port_remove(nxt_process_t *process, 95 nxt_port_t *port); 96 97nxt_port_t *nxt_process_connected_port_find(nxt_process_t *process, 98 nxt_pid_t pid, nxt_port_id_t port_id); 99 100 101void nxt_worker_process_quit_handler(nxt_task_t *task, 102 nxt_port_recv_msg_t *msg); 103 104 105#if (NXT_HAVE_SETPROCTITLE) 106 107#define nxt_process_title(task, fmt, ...) \ 108 setproctitle(fmt, __VA_ARGS__) 109 110#elif (NXT_LINUX || NXT_SOLARIS || NXT_MACOSX) 111 112#define NXT_SETPROCTITLE_ARGV 1 113NXT_EXPORT void nxt_process_title(nxt_task_t *task, const char *fmt, ...); 114 115#endif 116 117 118#define nxt_sched_yield() \ 119 sched_yield() 120 121/* 122 * Solaris declares abort() as __NORETURN, 123 * raise(SIGABRT) is mostly the same. 124 */ 125 126#define nxt_abort() \ 127 (void) raise(SIGABRT) 128 129NXT_EXPORT nxt_int_t nxt_user_cred_get(nxt_task_t *task, nxt_user_cred_t *uc, 130 const char *group); 131NXT_EXPORT nxt_int_t nxt_user_cred_set(nxt_task_t *task, nxt_user_cred_t *uc); 132 133NXT_EXPORT extern nxt_pid_t nxt_pid; 134NXT_EXPORT extern nxt_pid_t nxt_ppid; 135NXT_EXPORT extern char **nxt_process_argv; 136NXT_EXPORT extern char ***nxt_process_environ; 137 138 139#endif /* _NXT_PROCESS_H_INCLUDED_ */ | 61 nxt_lvlhsh_t connected_ports; /* of nxt_port_t */ 62} nxt_process_t; 63 64 65NXT_EXPORT nxt_pid_t nxt_process_create(nxt_task_t *task, 66 nxt_process_t *process); 67NXT_EXPORT nxt_pid_t nxt_process_execute(nxt_task_t *task, char *name, 68 char **argv, char **envp); 69NXT_EXPORT nxt_int_t nxt_process_daemon(nxt_task_t *task); 70NXT_EXPORT void nxt_nanosleep(nxt_nsec_t ns); 71 72NXT_EXPORT void nxt_process_arguments(nxt_task_t *task, char **orig_argv, 73 char ***orig_envp); 74 75#define nxt_process_port_remove(port) \ 76 nxt_queue_remove(&port->link) 77 78#define nxt_process_port_first(process) \ 79 nxt_queue_link_data(nxt_queue_first(&process->ports), nxt_port_t, link) 80 81NXT_EXPORT void nxt_process_port_add(nxt_task_t *task, nxt_process_t *process, 82 nxt_port_t *port); 83 84#define nxt_process_port_each(process, port) \ 85 nxt_queue_each(port, &process->ports, nxt_port_t, link) 86 87#define nxt_process_port_loop \ 88 nxt_queue_loop 89 90 91void nxt_process_connected_port_add(nxt_process_t *process, nxt_port_t *port); 92 93void nxt_process_connected_port_remove(nxt_process_t *process, 94 nxt_port_t *port); 95 96nxt_port_t *nxt_process_connected_port_find(nxt_process_t *process, 97 nxt_pid_t pid, nxt_port_id_t port_id); 98 99 100void nxt_worker_process_quit_handler(nxt_task_t *task, 101 nxt_port_recv_msg_t *msg); 102 103 104#if (NXT_HAVE_SETPROCTITLE) 105 106#define nxt_process_title(task, fmt, ...) \ 107 setproctitle(fmt, __VA_ARGS__) 108 109#elif (NXT_LINUX || NXT_SOLARIS || NXT_MACOSX) 110 111#define NXT_SETPROCTITLE_ARGV 1 112NXT_EXPORT void nxt_process_title(nxt_task_t *task, const char *fmt, ...); 113 114#endif 115 116 117#define nxt_sched_yield() \ 118 sched_yield() 119 120/* 121 * Solaris declares abort() as __NORETURN, 122 * raise(SIGABRT) is mostly the same. 123 */ 124 125#define nxt_abort() \ 126 (void) raise(SIGABRT) 127 128NXT_EXPORT nxt_int_t nxt_user_cred_get(nxt_task_t *task, nxt_user_cred_t *uc, 129 const char *group); 130NXT_EXPORT nxt_int_t nxt_user_cred_set(nxt_task_t *task, nxt_user_cred_t *uc); 131 132NXT_EXPORT extern nxt_pid_t nxt_pid; 133NXT_EXPORT extern nxt_pid_t nxt_ppid; 134NXT_EXPORT extern char **nxt_process_argv; 135NXT_EXPORT extern char ***nxt_process_environ; 136 137 138#endif /* _NXT_PROCESS_H_INCLUDED_ */ |