Skip to content

Commit 0e09abe

Browse files
committed
修复子进程退出异常的问题
1 parent 8067eb9 commit 0e09abe

1 file changed

Lines changed: 21 additions & 21 deletions

File tree

src/core.c

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,15 @@ static void SIG_EXIT(core_loop *loop, core_signal *signal, int revents){
6565
/* 只有主进程退出的时候才需要通知子进程退出 */
6666
if (ev_userdata(loop))
6767
kill(0, SIGQUIT);
68-
6968
return exit(EXIT_SUCCESS);
7069
}
7170

7271
/* 内部异常 */
7372
static void EV_ERROR_CB(const char *msg){
7473
LOG("ERROR", msg);
7574
LOG("ERROR", strerror(errno));
76-
if (core_default_loop()) {
77-
pid_t *pids = (pid_t *)ev_userdata(core_default_loop());
75+
if (CORE_LOOP) {
76+
pid_t *pids = (pid_t *)ev_userdata(CORE_LOOP);
7877
if (pids)
7978
kill(0, SIGKILL);
8079
}
@@ -196,18 +195,21 @@ static inline void signal_init(){
196195
core_signal_init(&sigtstp, SIG_IGNORE, SIGTSTP);
197196
core_signal_start(CORE_LOOP_ &sigtstp);
198197

199-
/* TERM信号 显示退出 */
200-
core_signal_init(&sigterm, SIG_EXIT, SIGTERM);
201-
core_signal_start(CORE_LOOP_ &sigterm);
198+
if (ev_userdata(CORE_LOOP)) {
199+
200+
/* TERM信号 显示退出 */
201+
core_signal_init(&sigterm, SIG_EXIT, SIGTERM);
202+
core_signal_start(CORE_LOOP_ &sigterm);
202203

203-
/* INT信号 显示退出 */
204-
core_signal_init(&sigint, SIG_EXIT, SIGINT);
205-
core_signal_start(CORE_LOOP_ &sigint);
204+
/* INT信号 显示退出 */
205+
core_signal_init(&sigint, SIG_EXIT, SIGINT);
206+
core_signal_start(CORE_LOOP_ &sigint);
206207

207-
/* QUIT信号 显示退出 */
208-
core_signal_init(&sigquit, SIG_EXIT, SIGQUIT);
209-
core_signal_start(CORE_LOOP_ &sigquit);
208+
/* QUIT信号 显示退出 */
209+
core_signal_init(&sigquit, SIG_EXIT, SIGQUIT);
210+
core_signal_start(CORE_LOOP_ &sigquit);
210211

212+
}
211213
}
212214

213215
int core_worker_run(const char entry[]) {
@@ -216,7 +218,7 @@ int core_worker_run(const char entry[]) {
216218
/* hook 事件循环错误信息 */
217219
core_ev_set_syserr_cb(EV_ERROR_CB);
218220
/* 初始化事件循环对象 */
219-
core_loop *loop = core_loop_fork(core_default_loop());
221+
core_loop *loop = core_loop_fork(CORE_LOOP);
220222

221223
int status = 0;
222224

@@ -258,12 +260,11 @@ int core_master_run(pid_t *pids, int* pidcount) {
258260
/* hook 事件循环错误信息 */
259261
core_ev_set_syserr_cb(EV_ERROR_CB);
260262
/* 初始化事件循环对象 */
261-
core_loop *loop = core_loop_fork(core_default_loop());
262-
/* 初始化信号 */
263-
signal_init();
264-
/* 设置pid */
263+
core_loop *loop = core_loop_fork(CORE_LOOP);
264+
/* 设置pid */
265265
ev_set_userdata(loop, pids);
266-
/* 监听子进程 */
266+
/* 初始化信号 */
267+
signal_init();
267268

268269
lua_State *L = lua_newstate(L_ALLOC, NULL);
269270
if (!L){
@@ -274,11 +275,10 @@ int core_master_run(pid_t *pids, int* pidcount) {
274275

275276
/* 加载 Lua 标准库 */
276277
init_lua_libs(L, MASTER);
277-
// LOG("INFO", boot);
278+
278279
/* 读取文件或默认运行 */
279-
int status = luaL_loadbufferx(L, master_boot, strlen(master_boot), "=[boot.lua]", "t");
280+
int status = luaL_loadbufferx(L, master_boot, strlen(master_boot), "=[main.lua]", "t");
280281
if (status != LUA_OK) {
281-
printf("[%d], %s\n", status, lua_tostring(L, -1));
282282
lua_close(L);
283283
kill(0, SIGQUIT);
284284
core_exit();

0 commit comments

Comments
 (0)