如何使用Spawn运行和停止子服务器node.js?

时间:2018-09-28 10:37:01

标签: javascript node.js

我想使用node.js启动/停止第二个应用程序

我在目录中有以下2个nodejs应用程序:

--app.js
 |
 -app2.js

内部app.js

serverProcess = spawn('node', ['app2.js']);
process.stdin.pipe(serverProcess.stdin);

serverProcess.stdout.on('data', data => {
    console.log(`child stdout:\n${data}`);
});

setTimeout(function() {
    console.log('kill');
    serverProcess.stdin.pause();
    serverProcess.kill();
}, 5000);

内部app2.js

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

我想做的是运行app.js,它将app2.js运行5秒钟,将输出记录到stdout,这样我就可以看到它,然后终止该过程。

当前,app2.js被杀死,但是app.js仍在运行,并且没有终止。

我该如何更正我的代码,以便app.js一被杀死就终止?

1 个答案:

答案 0 :(得分:1)

app.js被杀死时,app2.js不会退出,因为由于以下原因,它会监听stdio流的输入:

process.stdin.pipe(serverProcess.stdin);

process.stdin.pause()之后,您必须写serverProcess(不是 console.log('kill') )。

或者完全删除process.stdin.pipe(serverProcess.stdin),因为您不使用通过stdin获得的输入。