xref: /unit/src/nxt_process.h (revision 0:a63ceefd6ab0)
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