From a5c12933bd1d6c91eff8bbbeb4f53113fac409a5 Mon Sep 17 00:00:00 2001 From: Ning Shang Date: Fri, 20 Nov 2020 11:23:27 +0800 Subject: [PATCH 1/4] quick fix kill command under windows --- nni/tools/nnictl/command_utils.py | 3 ++- ts/nni_manager/main.ts | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/nni/tools/nnictl/command_utils.py b/nni/tools/nnictl/command_utils.py index 52650b3bae..2bbcc883d1 100644 --- a/nni/tools/nnictl/command_utils.py +++ b/nni/tools/nnictl/command_utils.py @@ -34,7 +34,8 @@ def check_output_command(file_path, head=None, tail=None): def kill_command(pid): """kill command""" if sys.platform == 'win32': - psutil.Process(pid).terminate() + process = psutil.Process(pid=pid) + process.send_signal(signal.CTRL_BREAK_EVENT) else: cmds = ['kill', str(pid)] call(cmds) diff --git a/ts/nni_manager/main.ts b/ts/nni_manager/main.ts index 86a7a2583a..baa60bc998 100644 --- a/ts/nni_manager/main.ts +++ b/ts/nni_manager/main.ts @@ -175,7 +175,12 @@ mkDirP(getLogDir()) }); function getStopSignal(): any { - return 'SIGTERM'; + if (process.platform === "win32") { + return 'SIGBREAK'; + } + else { + return 'SIGTERM'; + } } function getCtrlCSignal(): any { From a7684ab725e1a342c52d371cf1db0bf5f1bb1a29 Mon Sep 17 00:00:00 2001 From: Ning Shang Date: Mon, 23 Nov 2020 22:52:34 +0800 Subject: [PATCH 2/4] listen on sigterm sigbreak sigint sigkill to stop nni --- ts/nni_manager/main.ts | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/ts/nni_manager/main.ts b/ts/nni_manager/main.ts index baa60bc998..79f5ef8c10 100644 --- a/ts/nni_manager/main.ts +++ b/ts/nni_manager/main.ts @@ -174,25 +174,7 @@ mkDirP(getLogDir()) console.error(`Failed to create log dir: ${err.stack}`); }); -function getStopSignal(): any { - if (process.platform === "win32") { - return 'SIGBREAK'; - } - else { - return 'SIGTERM'; - } -} - -function getCtrlCSignal(): any { - return 'SIGINT'; -} - -process.on(getCtrlCSignal(), async () => { - const log: Logger = getLogger(); - log.info(`Get SIGINT signal!`); -}); - -process.on(getStopSignal(), async () => { +async function cleanUp() { const log: Logger = getLogger(); let hasError: boolean = false; try { @@ -209,4 +191,10 @@ process.on(getStopSignal(), async () => { await log.close(); process.exit(hasError ? 1 : 0); } -}); +} + +process.on('SIGTERM', cleanUp); +process.on('SIGBREAK', cleanUp); +process.on('SIGINT', cleanUp); +//not sure if 'SIGKILL' signal can be listened +process.on('SIGKILL', cleanUp); From b205a90315ff77b9ab145b2496f8d9c1a2b1b5d4 Mon Sep 17 00:00:00 2001 From: J-shang Date: Tue, 24 Nov 2020 13:35:06 +0800 Subject: [PATCH 3/4] fix eslint --- ts/nni_manager/main.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ts/nni_manager/main.ts b/ts/nni_manager/main.ts index 79f5ef8c10..6f3407be79 100644 --- a/ts/nni_manager/main.ts +++ b/ts/nni_manager/main.ts @@ -174,7 +174,7 @@ mkDirP(getLogDir()) console.error(`Failed to create log dir: ${err.stack}`); }); -async function cleanUp() { +async function cleanUp(): Promise { const log: Logger = getLogger(); let hasError: boolean = false; try { @@ -188,7 +188,7 @@ async function cleanUp() { hasError = true; log.error(`${err.stack}`); } finally { - await log.close(); + log.close(); process.exit(hasError ? 1 : 0); } } From 9478c7dfcc8c6276ab2d86f53f0b26f4e5c3895f Mon Sep 17 00:00:00 2001 From: J-shang Date: Tue, 24 Nov 2020 14:38:13 +0800 Subject: [PATCH 4/4] remove listen on sigkill --- ts/nni_manager/main.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/ts/nni_manager/main.ts b/ts/nni_manager/main.ts index 6f3407be79..9c7c6263ae 100644 --- a/ts/nni_manager/main.ts +++ b/ts/nni_manager/main.ts @@ -196,5 +196,3 @@ async function cleanUp(): Promise { process.on('SIGTERM', cleanUp); process.on('SIGBREAK', cleanUp); process.on('SIGINT', cleanUp); -//not sure if 'SIGKILL' signal can be listened -process.on('SIGKILL', cleanUp);