我动态生成一个节点脚本,然后通过节点派生一个子进程来执行它,并将输出传回父进程
在父级:
//...build child.js
var child = require('child_process');
childProcess = child.fork('child.js');
childProcess.on('message',
function(dataFromChild) {
//process data
});
子进程
process.send(objectToSend,function() {
//code to send objectToSend
//process.exit(0);
}
实际的代码要广泛得多。我也使用socket.io和mysql。当我完成处理时,我想我正在关闭子进程中所有打开的数据库连接和套接字。但是,子进程不会退出。如果我在退出点执行process.exit(0),它确实退出了。我认为它一定是开放的,不允许它自然退出。我怎么知道它是什么?
我尝试了一个简单的子脚本,基本上是一个带有console.log语句的单行脚本,以测试它是否会在没有exit语句的情况下退出。确实如此。
您可以使用linux lsof
程序列出子进程拥有的所有打开的文件描述符。在节点中,活动句柄npm包应该可以帮助您跟踪已分配的侦听器、超时等。