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(网络)套接字仍然打开并正在侦听。他们在孩子被杀后立即关闭。
为什么会这样?