1e18a033bSKonstantin Ananyev
2e18a033bSKonstantin Ananyev/*
3e18a033bSKonstantin Ananyev * Copyright (C) Igor Sysoev
4e18a033bSKonstantin Ananyev * Copyright (C) Nginx, Inc.
5e18a033bSKonstantin Ananyev */
6e18a033bSKonstantin Ananyev
7e18a033bSKonstantin Ananyev
8e18a033bSKonstantin Ananyev#ifndef _NGX_PROCESS_H_INCLUDED_
9e18a033bSKonstantin Ananyev#define _NGX_PROCESS_H_INCLUDED_
10e18a033bSKonstantin Ananyev
11e18a033bSKonstantin Ananyev
12e18a033bSKonstantin Ananyevtypedef DWORD               ngx_pid_t;
13e18a033bSKonstantin Ananyev#define NGX_INVALID_PID     0
14e18a033bSKonstantin Ananyev
15e18a033bSKonstantin Ananyev
16e18a033bSKonstantin Ananyev#define ngx_getpid          GetCurrentProcessId
17e18a033bSKonstantin Ananyev#define ngx_log_pid         ngx_pid
18e18a033bSKonstantin Ananyev
19e18a033bSKonstantin Ananyev
20e18a033bSKonstantin Ananyev#define NGX_PROCESS_SYNC_NAME                                                 \
21e18a033bSKonstantin Ananyev    (sizeof("ngx_cache_manager_mutex_") + NGX_INT32_LEN)
22e18a033bSKonstantin Ananyev
23e18a033bSKonstantin Ananyev
24e18a033bSKonstantin Ananyevtypedef uint64_t            ngx_cpuset_t;
25e18a033bSKonstantin Ananyev
26e18a033bSKonstantin Ananyev
27e18a033bSKonstantin Ananyevtypedef struct {
28e18a033bSKonstantin Ananyev    HANDLE                  handle;
29e18a033bSKonstantin Ananyev    ngx_pid_t               pid;
30e18a033bSKonstantin Ananyev    char                   *name;
31e18a033bSKonstantin Ananyev
32e18a033bSKonstantin Ananyev    HANDLE                  term;
33e18a033bSKonstantin Ananyev    HANDLE                  quit;
34e18a033bSKonstantin Ananyev    HANDLE                  reopen;
35e18a033bSKonstantin Ananyev
36e18a033bSKonstantin Ananyev    u_char                  term_event[NGX_PROCESS_SYNC_NAME];
37e18a033bSKonstantin Ananyev    u_char                  quit_event[NGX_PROCESS_SYNC_NAME];
38e18a033bSKonstantin Ananyev    u_char                  reopen_event[NGX_PROCESS_SYNC_NAME];
39e18a033bSKonstantin Ananyev
40e18a033bSKonstantin Ananyev    unsigned                just_spawn:1;
41e18a033bSKonstantin Ananyev    unsigned                exiting:1;
42e18a033bSKonstantin Ananyev} ngx_process_t;
43e18a033bSKonstantin Ananyev
44e18a033bSKonstantin Ananyev
45e18a033bSKonstantin Ananyevtypedef struct {
46e18a033bSKonstantin Ananyev    char                   *path;
47e18a033bSKonstantin Ananyev    char                   *name;
48e18a033bSKonstantin Ananyev    char                   *args;
49e18a033bSKonstantin Ananyev    char *const            *argv;
50e18a033bSKonstantin Ananyev    char *const            *envp;
51e18a033bSKonstantin Ananyev    HANDLE                  child;
52e18a033bSKonstantin Ananyev} ngx_exec_ctx_t;
53e18a033bSKonstantin Ananyev
54e18a033bSKonstantin Ananyev
55e18a033bSKonstantin Ananyevngx_pid_t ngx_spawn_process(ngx_cycle_t *cycle, char *name, ngx_int_t respawn);
56e18a033bSKonstantin Ananyevngx_pid_t ngx_execute(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx);
57e18a033bSKonstantin Ananyev
58e18a033bSKonstantin Ananyev#define ngx_debug_point()
59e18a033bSKonstantin Ananyev#define ngx_sched_yield()   SwitchToThread()
60e18a033bSKonstantin Ananyev
61e18a033bSKonstantin Ananyev
62e18a033bSKonstantin Ananyev#define NGX_MAX_PROCESSES         (MAXIMUM_WAIT_OBJECTS - 4)
63e18a033bSKonstantin Ananyev
64e18a033bSKonstantin Ananyev#define NGX_PROCESS_RESPAWN       -2
65e18a033bSKonstantin Ananyev#define NGX_PROCESS_JUST_RESPAWN  -3
66e18a033bSKonstantin Ananyev
67e18a033bSKonstantin Ananyev
68e18a033bSKonstantin Ananyevextern int                  ngx_argc;
69e18a033bSKonstantin Ananyevextern char               **ngx_argv;
70e18a033bSKonstantin Ananyevextern char               **ngx_os_argv;
71e18a033bSKonstantin Ananyev
72e18a033bSKonstantin Ananyevextern ngx_int_t            ngx_last_process;
73e18a033bSKonstantin Ananyevextern ngx_process_t        ngx_processes[NGX_MAX_PROCESSES];
74e18a033bSKonstantin Ananyev
75e18a033bSKonstantin Ananyevextern ngx_pid_t            ngx_pid;
76e18a033bSKonstantin Ananyev
77e18a033bSKonstantin Ananyev
78e18a033bSKonstantin Ananyev#endif /* _NGX_PROCESS_H_INCLUDED_ */
79