Better proc management.

This commit is contained in:
NI
2019-08-29 21:26:26 +08:00
parent e82722d424
commit b1e77f70ba

View File

@@ -32,8 +32,8 @@ const webpack = require("webpack"),
let appSpawnProc = null, let appSpawnProc = null,
appBuildProc = null; appBuildProc = null;
const killAppSpawnProc = then => { const killSpawnProc = (proc, then) => {
if (appSpawnProc === null) { if (proc === null) {
then(); then();
return; return;
@@ -41,23 +41,21 @@ const killAppSpawnProc = then => {
process.stdout.write("Shutdown application ...\n"); process.stdout.write("Shutdown application ...\n");
process.kill(-appSpawnProc.proc.pid, "SIGINT"); process.kill(-proc.proc.pid, "SIGINT");
let forceKill = setTimeout(() => { let forceKill = setTimeout(() => {
process.kill(-appSpawnProc.proc.pid); process.kill(-proc.proc.pid);
}, 3000); }, 3000);
appSpawnProc.waiter.then(() => { proc.waiter.then(() => {
clearTimeout(forceKill); clearTimeout(forceKill);
appSpawnProc = null;
then(); then();
}); });
}; };
const startAppSpawnProc = onExit => { const startAppSpawnProc = onExit => {
killAppSpawnProc(() => { killSpawnProc(appSpawnProc, () => {
let mEnv = {}; let mEnv = {};
for (let i in process.env) { for (let i in process.env) {
@@ -97,6 +95,7 @@ const startAppSpawnProc = onExit => {
onExit(); onExit();
resolve(n); resolve(n);
appSpawnProc = null;
}); });
}); });
@@ -117,7 +116,7 @@ const killAllProc = () => {
appBuildProc = null; appBuildProc = null;
} }
killAppSpawnProc(() => { killSpawnProc(appSpawnProc, () => {
process.exit(0); process.exit(0);
}); });
}; };
@@ -239,19 +238,20 @@ module.exports = {
apply: compiler => { apply: compiler => {
compiler.hooks.afterEmit.tap("AfterEmitPlugin", () => { compiler.hooks.afterEmit.tap("AfterEmitPlugin", () => {
if (appBuildProc !== null) { if (appBuildProc !== null) {
let aBuildProc = appBuildProc;
appBuildProc = null;
process.stdout.write( process.stdout.write(
"Killing the previous source code generater ...\n" "Killing the previous source code generater ...\n"
); );
appBuildProc.stdin.end(); aBuildProc.stdin.end();
appBuildProc.stdout.destroy(); aBuildProc.stdout.destroy();
appBuildProc.stderr.destroy(); aBuildProc.stderr.destroy();
appBuildProc.kill(); aBuildProc.kill();
appBuildProc = null;
} }
killAppSpawnProc(() => { killSpawnProc(appSpawnProc, () => {
process.stdout.write("Generating source code ...\n"); process.stdout.write("Generating source code ...\n");
appBuildProc = exec( appBuildProc = exec(