node如何手动关闭子进程

子进程child.js:

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

父进程:

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();

设置了spawn方法的参数'stdio':['ignore',out,err]和 'detached':true后,子进程一直运行,关闭父进程的终端或者关闭IDE都不能终止,怎么办?

阅读 15.3k
2 个回答

你的子进程是一个无限循环触发程序。
你只有强制用kill去杀死这个子进程啊。
比如在主进程退出前主动kill子进程。添加下面的代码到主进程退出程序片段中

p.kill('SIGHUP')

有个第三方库:

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

我也遇到过监视detached进程的问题,用这个第三方库能解决,pm2也是使用了这套代码杀死子进程的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏