为什么一个独立的,未经过编程的node.js子进程会保持其父级套接字打开?

时间:2015-09-11 12:13:33

标签: javascript node.js child-process fs

  • 这个问题是关于node.js的底层O / S处理,并影响Mac和Linux。
  • 它处理node.js 0.10.39,但是文档从4.0.0不变(大概也适用于那里)

node.js手册说:

  

如果设置了分离选项,子进程将成为领导者   一个新的流程组。这使得孩子可以继续   在父退出后运行。

     

默认情况下,父级将等待已分离的子级退出。至   防止父母等待给定的孩子,使用child.unref()   方法,并且父级的事件循环不会将子项包含在其引用计数中。

当你启动一个node.js子进程作为分离和未修复时,使用单独的stdio如下:

var child = spawn('prg', [], { // child spawn options
  detached: true,
  stdio: [
    'ignore', // stdin
    fs.openSync( updateOutputFile, "w" ), 
    fs.openSync( updateErrorFile, "w" ) 
  ]
}
child.unref();

然后杀死父级,lsof显示父级正在侦听的TCP / IP(网络)套接字仍然打开并正在侦听。他们在孩子被杀后立即关闭。

为什么会这样?

0 个答案:

没有答案