鍍金池/ 問(wèn)答/HTML/ node如何手動(dòng)關(guān)閉子進(jìn)程

node如何手動(dòng)關(guān)閉子進(jìn)程

子進(jìn)程child.js:

setInterval(function () {
    console.log(1);
},2000);

父進(jìn)程:

const fs = require('fs');
const out = fs.openSync('a.txt','a');
const err = fs.openSync('b.txt','a');
const p = require('child_process').spawn(
        'node',
        ['child.js','a','b'],
        {
            'stdio':['ignore',out,err],
            'detached':true
        }
    );
p.unref();

設(shè)置了spawn方法的參數(shù)'stdio':['ignore',out,err]和 'detached':true后,子進(jìn)程一直運(yùn)行,關(guān)閉父進(jìn)程的終端或者關(guān)閉IDE都不能終止,怎么辦?

回答
編輯回答
拽很帥

你的子進(jìn)程是一個(gè)無(wú)限循環(huán)觸發(fā)程序。
你只有強(qiáng)制用kill去殺死這個(gè)子進(jìn)程啊。
比如在主進(jìn)程退出前主動(dòng)kill子進(jìn)程。添加下面的代碼到主進(jìn)程退出程序片段中

p.kill('SIGHUP')
2017年6月12日 22:28
編輯回答
尋仙

有個(gè)第三方庫(kù):

https://github.com/pkrumins/n...

我也遇到過(guò)監(jiān)視detached進(jìn)程的問(wèn)題,用這個(gè)第三方庫(kù)能解決,pm2也是使用了這套代碼殺死子進(jìn)程的。

2017年3月10日 13:57