node 父进程退出了但子进程未退出
问题描述
A进程用spawn启动B进程(webpack打包后的node代码)。B进程fork一个node进程,spawn一个python进程。
当webpack监听到文件变化,重新打包后,A进程会向B进程发送 kill SIGTERM 信号。
此时B进程退出。A进程在webpack打包完成新代码后,重新启动一个新的B进程。显然B进程也会启动新的C D进程。
此时通过 ps -ef| grep '特征'。发现各存在两个C D 进程。如此下去,往复修改代码,C D进程就会越来越多。新的C D 进程ppid是B进程。旧的C D 进程的ppid则是1。
我认为理论上B进程被kill掉。则CD 进程自然也被kill掉。为什么CD进程没有被kill掉,
以及如何才能kill掉?但是A进程退出,这些进程全都退出了。
问题出现的环境背景及自己尝试过哪些方法
我尝试kill SIGKILL 信号给B进程,仍然没有解决到问题。
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
// A进程
let server = null
webpack(config).plugin('done',(){
//启动B进程
if (server) {
console.log('杀掉server')
server.kill('SIGTERM')
}
server = cp.spawn('node', [serverPath], {
env: Object.assign({ NODE_ENV: 'development' }, process.env),
silent: false,
})
server.stdout.on('data',()=>{})
server.stderr.on('data', () => {})
})
你期待的结果是什么?实际看到的错误信息又是什么?
如何使B进程被kill时,C D进程乖乖退出(不然影响业务)。以及他们为什么没有退出?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)