handle sigchild
This commit is contained in:
parent
781d31d39f
commit
651fb09407
|
@ -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() {
|
static void dndSetSignalHandle() {
|
||||||
taosSetSignal(SIGTERM, dndStopDnode);
|
taosSetSignal(SIGTERM, dndStopDnode);
|
||||||
taosSetSignal(SIGHUP, dndStopDnode);
|
taosSetSignal(SIGHUP, dndStopDnode);
|
||||||
|
@ -53,7 +46,7 @@ static void dndSetSignalHandle() {
|
||||||
|
|
||||||
if (!tsMultiProcess) {
|
if (!tsMultiProcess) {
|
||||||
} else if (global.ntype == DNODE || global.ntype == NODE_MAX) {
|
} else if (global.ntype == DNODE || global.ntype == NODE_MAX) {
|
||||||
taosSetSignal(SIGCHLD, dndHandleChild);
|
taosIgnSignal(SIGCHLD);
|
||||||
} else {
|
} else {
|
||||||
taosKillChildOnParentStopped();
|
taosKillChildOnParentStopped();
|
||||||
}
|
}
|
||||||
|
|
|
@ -128,7 +128,7 @@ static int32_t dndNewProc(SMgmtWrapper *pWrapper, ENodeType n) {
|
||||||
}
|
}
|
||||||
|
|
||||||
pWrapper->procId = pid;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,13 +263,13 @@ static int32_t dndRunInParentProcess(SDnode *pDnode) {
|
||||||
if (!pWrapper->required) continue;
|
if (!pWrapper->required) continue;
|
||||||
if (pDnode->ntype == NODE_MAX) continue;
|
if (pDnode->ntype == NODE_MAX) continue;
|
||||||
|
|
||||||
if (pWrapper->procId != 0 && !taosProcExists(pWrapper->procId)) {
|
if (pWrapper->procId <= 0 || !taosProcExists(pWrapper->procId)) {
|
||||||
dInfo("node:%s, process not exist, pid:%d", pWrapper->name, 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);
|
dndNewProc(pWrapper, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
taosMsleep(100);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
taosMsleep(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -23,6 +23,9 @@ int32_t taosNewProc(char **args) {
|
||||||
int32_t pid = fork();
|
int32_t pid = fork();
|
||||||
if (pid == 0) {
|
if (pid == 0) {
|
||||||
args[0] = tsProcPath;
|
args[0] = tsProcPath;
|
||||||
|
close(STDIN_FILENO);
|
||||||
|
close(STDOUT_FILENO);
|
||||||
|
close(STDERR_FILENO);
|
||||||
return execvp(tsProcPath, args);
|
return execvp(tsProcPath, args);
|
||||||
} else {
|
} else {
|
||||||
return pid;
|
return pid;
|
||||||
|
|
Loading…
Reference in New Issue