diff --git a/source/dnode/mgmt/main/exe/dndMain.c b/source/dnode/mgmt/main/exe/dndMain.c index 61b480990d..0d2ddbfbbc 100644 --- a/source/dnode/mgmt/main/exe/dndMain.c +++ b/source/dnode/mgmt/main/exe/dndMain.c @@ -37,13 +37,6 @@ static void dndStopDnode(int signum, void *info, void *ctx) { } } -static void dndHandleChild(int signum, void *info, void *ctx) { - dInfo("sigchild received"); - if (global.pDnode != NULL) { - dndHandleEvent(global.pDnode, DND_EVENT_CHILD); - } -} - static void dndSetSignalHandle() { taosSetSignal(SIGTERM, dndStopDnode); taosSetSignal(SIGHUP, dndStopDnode); @@ -53,7 +46,7 @@ static void dndSetSignalHandle() { if (!tsMultiProcess) { } else if (global.ntype == DNODE || global.ntype == NODE_MAX) { - taosSetSignal(SIGCHLD, dndHandleChild); + taosIgnSignal(SIGCHLD); } else { taosKillChildOnParentStopped(); } diff --git a/source/dnode/mgmt/main/src/dndExec.c b/source/dnode/mgmt/main/src/dndExec.c index c5d5707a99..76614b2916 100644 --- a/source/dnode/mgmt/main/src/dndExec.c +++ b/source/dnode/mgmt/main/src/dndExec.c @@ -128,7 +128,7 @@ static int32_t dndNewProc(SMgmtWrapper *pWrapper, ENodeType n) { } pWrapper->procId = pid; - dInfo("node:%s, run in new process, pid:%d", pWrapper->name, pid); + dInfo("node:%s, continue running in new process:%d", pWrapper->name, pid); return 0; } @@ -263,13 +263,13 @@ static int32_t dndRunInParentProcess(SDnode *pDnode) { if (!pWrapper->required) continue; if (pDnode->ntype == NODE_MAX) continue; - if (pWrapper->procId != 0 && !taosProcExists(pWrapper->procId)) { - dInfo("node:%s, process not exist, pid:%d", pWrapper->name, pWrapper->procId); + if (pWrapper->procId <= 0 || !taosProcExists(pWrapper->procId)) { + dInfo("node:%s, process:%d does not exist or is killed and needs to be restarted", pWrapper->name, pWrapper->procId); dndNewProc(pWrapper, n); } - - taosMsleep(100); } + + taosMsleep(100); } return 0; diff --git a/source/os/src/osProc.c b/source/os/src/osProc.c index 00ed650cbb..2d2174a4c8 100644 --- a/source/os/src/osProc.c +++ b/source/os/src/osProc.c @@ -23,6 +23,9 @@ int32_t taosNewProc(char **args) { int32_t pid = fork(); if (pid == 0) { args[0] = tsProcPath; + close(STDIN_FILENO); + close(STDOUT_FILENO); + close(STDERR_FILENO); return execvp(tsProcPath, args); } else { return pid;