1 2 /* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7 #ifndef _NXT_UNIX_PROCESS_H_INCLUDED_ 8 #define _NXT_UNIX_PROCESS_H_INCLUDED_ 9 10 11 typedef pid_t nxt_pid_t; 12 13 14 #define \ 15 nxt_sched_yield() \ 16 sched_yield() 17 18 19 #define \ 20 nxt_process_id() \ 21 nxt_pid 22 23 24 /* 25 * Solaris declares abort() as __NORETURN, 26 * raise(SIGABRT) is mostly the same. 27 */ 28 29 #define \ 30 nxt_abort() \ 31 (void) raise(SIGABRT) 32 33 34 typedef void (*nxt_process_start_t)(void *data); 35 36 NXT_EXPORT nxt_pid_t nxt_process_create(nxt_process_start_t start, void *data, 37 const char *name); 38 NXT_EXPORT nxt_pid_t nxt_process_execute(char *name, char **argv, char **envp); 39 NXT_EXPORT nxt_int_t nxt_process_daemon(void); 40 NXT_EXPORT void nxt_nanosleep(nxt_nsec_t ns); 41 42 NXT_EXPORT void nxt_process_arguments(char **orig_argv, char ***orig_envp); 43 44 45 #if (NXT_HAVE_SETPROCTITLE) 46 47 #define \ 48 nxt_process_title(title) \ 49 setproctitle("%s", title) 50 51 #elif (NXT_LINUX || NXT_SOLARIS || NXT_MACOSX) 52 53 #define NXT_SETPROCTITLE_ARGV 1 54 NXT_EXPORT void nxt_process_title(const char *title); 55 56 #else 57 58 #define \ 59 nxt_process_title(title) 60 61 #endif 62 63 64 NXT_EXPORT extern nxt_pid_t nxt_pid; 65 NXT_EXPORT extern nxt_pid_t nxt_ppid; 66 NXT_EXPORT extern char **nxt_process_argv; 67 NXT_EXPORT extern char ***nxt_process_environ; 68 69 70 typedef uid_t nxt_uid_t; 71 typedef gid_t nxt_gid_t; 72 73 74 typedef struct { 75 const char *user; 76 nxt_uid_t uid; 77 nxt_gid_t base_gid; 78 nxt_uint_t ngroups; 79 nxt_gid_t *gids; 80 } nxt_user_cred_t; 81 82 83 NXT_EXPORT nxt_int_t nxt_user_cred_get(nxt_user_cred_t *uc, const char *group); 84 NXT_EXPORT nxt_int_t nxt_user_cred_set(nxt_user_cred_t *uc); 85 86 87 #endif /* _NXT_UNIX_PROCESS_H_INCLUDED_ */ 88