nodejs 怎么释放 回调函数 闭包,一个子进程里面生成了事件回调函数,怎么清除这个子进程

Jacky_Lu 2018-07-14 08:54:06
一个子进程里面生成了事件回调函数,怎么清除这个子进程

const spawn = require('child_process').spawn;
var express = require('express');
var router = express.Router();

var player;

var music=[
'/home/pi/Music/city.mp3',
'/home/pi/Music/road.mp3',
'/home/pi/Music/student.mp3'
];

function Playmusic(str){
if(player!=null)
{
player.kill('SIGHUP');
player=null; //这样能释放闭包数据吗? 能清除 它附带生成的 player.stdout.on player.stderr.on 。。。
console.log('kill process');
}
player= spawn('mplayer', [str]); //这个是赋值 还是引用
player.stdout.on('data', (data) => {
//console.log(`输出:${data}`);
});

player.stderr.on('data', (data) => {
console.log(`错误:${data}`);
});
player.on('close', (code) => {
console.log(`子进程退出码:${code}`);
//player=null;
});
}


var musiccnt=0
router.get('/', function(req, res, next) {
console.log('music play');
Playmusic(music[musiccnt%music.length]);++musiccnt;
res.end('music');
});


module.exports = {
router:router,
playmusic:Playmusic
};
...全文
303 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
漠子凉 2018-07-14
  • 打赏
  • 举报
回复
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。 在 spawn 中可以通过 options.detached 指定父进程死亡后是否允许子进程存活。 + 孤儿进程在被init进程接手以后,init进程会循环地 wait() 它已经退出的子进程,来进行善后,所以孤儿进程不会有什么危害。

僵尸进程:一个进程使用 fork 创建子进程,如果子进程退出,而父进程并没有调用 wait 或 waitpid 获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。 + 僵尸进程因为没有被父进程调用 wait ,进程号、退出状态、运行时间等都被保存在内存中,特别是进程号一直被占用着,而系统的进程号又是有限的,所以大量的僵尸进程是会带来非常大的威胁的。

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧