-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkc_server_spawn.h
More file actions
168 lines (143 loc) · 5.47 KB
/
kc_server_spawn.h
File metadata and controls
168 lines (143 loc) · 5.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/*
* kc_server_spawn.h — Kcode 하위 서버 프로세스 생성/종료/PID 관리 헤더
* version : v22.3.0
*
* 역할:
* kserver 가 --with-db / --with-ont / --with-db-ont / --with-all 옵션을
* 받았을 때 독립 프로세스(kdbserver / kont_server / kdbont_server)를
* fork+exec 으로 생성하고 PID·상태를 추적한다.
*
* 설계 원칙:
* - 각 하위 서버는 완전 독립 프로세스 (kserver 종료에 영향 안 받음)
* - --detach 옵션 시 데몬화 (부모 kserver 와 생명주기 분리)
* - 최대 KC_SPAWN_MAX_PROCS 개 하위 서버 동시 관리
* - POSIX 전용 (Linux / macOS)
*
* 사용 예:
* KcSpawnCtx ctx;
* kc_spawn_init(&ctx);
* kc_spawn_server(&ctx, KC_SPAWN_DB, "./kdbserver", 5432, 0);
* kc_spawn_server(&ctx, KC_SPAWN_ONT, "./kont_server", 8765, 0);
* // ... kserver 메인 루프 ...
* kc_spawn_stop_all(&ctx);
* kc_spawn_destroy(&ctx);
*
* gcc 검증: gcc -fsyntax-only -std=c11 -I. kc_server_spawn.c
*
* MIT License
* zerojat7
*/
#ifndef KC_SERVER_SPAWN_H
#define KC_SERVER_SPAWN_H
#include <sys/types.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/* ================================================================
* 1. 상수
* ================================================================ */
#define KC_SPAWN_VERSION "22.3.0"
#define KC_SPAWN_MAX_PROCS 8 /* 최대 동시 하위 프로세스 */
#define KC_SPAWN_BIN_LEN 256 /* 실행파일 경로 최대 길이 */
#define KC_SPAWN_ARG_LEN 64 /* 단일 인수 최대 길이 */
#define KC_SPAWN_MAX_ARGS 16 /* 인수 최대 개수 */
/* ================================================================
* 2. 열거형
* ================================================================ */
/* 하위 서버 종류 */
typedef enum {
KC_SPAWN_NONE = 0,
KC_SPAWN_DB = 1, /* kdbserver — 일반 DB 서버 */
KC_SPAWN_ONT = 2, /* kont_server — 온톨로지 DB 서버 */
KC_SPAWN_DBONT = 3 /* kdbont_server— 통합 DB 서버 */
} KcSpawnKind;
/* 프로세스 상태 */
typedef enum {
KC_PROC_IDLE = 0, /* 미사용 슬롯 */
KC_PROC_RUNNING = 1, /* 실행 중 */
KC_PROC_STOPPED = 2, /* 정상 종료 */
KC_PROC_FAILED = 3 /* 비정상 종료 */
} KcProcState;
/* ================================================================
* 3. 프로세스 레코드
* ================================================================ */
typedef struct {
KcSpawnKind kind; /* 서버 종류 */
KcProcState state; /* 현재 상태 */
pid_t pid; /* 자식 PID (0=없음) */
int port; /* 할당 포트 */
int detached; /* 1=데몬 분리됨 */
char bin[KC_SPAWN_BIN_LEN]; /* 실행파일 경로 */
} KcProcRecord;
/* ================================================================
* 4. 컨텍스트
* ================================================================ */
typedef struct {
KcProcRecord procs[KC_SPAWN_MAX_PROCS];
int count; /* 등록된 레코드 수 */
} KcSpawnCtx;
/* ================================================================
* 5. API
* ================================================================ */
/*
* kc_spawn_init — 컨텍스트 초기화 (사용 전 반드시 호출)
*/
void kc_spawn_init(KcSpawnCtx *ctx);
/*
* kc_spawn_server — 하위 서버 프로세스 생성
*
* ctx : 컨텍스트
* kind : KC_SPAWN_DB | KC_SPAWN_ONT | KC_SPAWN_DBONT
* bin : 실행파일 경로 (예: "./kdbserver")
* port : 리슨 포트 (0 = 기본값 사용)
* detach : 1 = 데몬화 (kserver 종료와 독립), 0 = kserver 종료 시 같이 종료
*
* 반환값: 0=성공, -1=실패
*/
int kc_spawn_server(KcSpawnCtx *ctx,
KcSpawnKind kind,
const char *bin,
int port,
int detach);
/*
* kc_spawn_stop — 특정 종류의 하위 서버 종료 (SIGTERM)
*
* 반환값: 0=성공(또는 이미 없음), -1=실패
*/
int kc_spawn_stop(KcSpawnCtx *ctx, KcSpawnKind kind);
/*
* kc_spawn_stop_all — 모든 하위 서버에 SIGTERM 전송
*/
void kc_spawn_stop_all(KcSpawnCtx *ctx);
/*
* kc_spawn_check — 하위 프로세스 상태 갱신 (waitpid WNOHANG)
* 메인 루프에서 주기적으로 호출해 좀비 프로세스를 정리한다.
*/
void kc_spawn_check(KcSpawnCtx *ctx);
/*
* kc_spawn_is_running — 특정 종류 서버가 실행 중인지 확인
*
* 반환값: 1=실행 중, 0=아님
*/
int kc_spawn_is_running(const KcSpawnCtx *ctx, KcSpawnKind kind);
/*
* kc_spawn_print_status — 모든 하위 프로세스 상태 출력 (stderr)
*/
void kc_spawn_print_status(const KcSpawnCtx *ctx);
/*
* kc_spawn_destroy — 컨텍스트 해제 (stop_all 후 호출)
*/
void kc_spawn_destroy(KcSpawnCtx *ctx);
/*
* kc_spawn_kind_name — KcSpawnKind → 이름 문자열
*/
const char *kc_spawn_kind_name(KcSpawnKind kind);
/*
* kc_spawn_version — 버전 문자열 반환
*/
const char *kc_spawn_version(void);
#ifdef __cplusplus
}
#endif
#endif /* KC_SERVER_SPAWN_H */