如何派生一个在父进程侦听不同debugging端口的subprocess

我正在试图使用child_process.fork产生一个进程,打破和监听V8debugging协议。

但是,我不能让分叉进程监听与父进程不同的端口。 假设父进程在6000侦听,subprocess也会尝试侦听端口6000

无法在端口6000上打开套接字,等待1000毫秒后再重试

这是我的代码:

 // `test.js`, invoked as `node --debug-brk=6000 test.js` var nodeModule, args, env, child nodeModule = path.normalize(path.join(__dirname, '..', 'app.js')) args = [ '--debug-brk=6001' , '127.0.0.1' , 3030 , 'api-testing' ] env = { 'DB_URI': 'mongodb://localhost/test' } child = require('child_process') .fork(nodeModule, args, {env: env}) .on('message', callback) 

正如你所看到的,我试图让分叉进程在端口6001上侦听,但subprocess尝试侦听父进程正在使用的端口6000

我怎样才能让subprocess侦听端口6001或其他一些自由端口?

这个主题有几个线程。 例如:

  • 如何debuggingNode.JS子分叉进程?
  • 使用cluster.fork()debuggingNode.js进程

然而:

  • 这些线程处理分叉的cluster变体
  • 请参阅execArgv ,该文件似乎execArgv logging在process ,并且仍然没有为cluster

足够简单的答案,发现这个评论 ,并从Freenode的#Node.js一些帮助:

只需将--debug-brk移动到options param的execArgv键中即可:

 // Excerpt: args = [ '127.0.0.1' , 3030 , 'api-testing' ] env = { 'DB_URI': 'mongodb://localhost/test' } child = fork(nodeModule, args, { env: env , execArgv: ['--debug-brk=6001'] }) .on('message', this.callback) 

execArgv是传递给节点进程的参数数组。 argv是传递给主模块的集合。 对于argv ,有一个专用于child_process.fork参数,但execArgv必须放在opts参数中。 这是有效的,在subprocess中我们有:

 > process.execArgv ["--debug-brk=6001"] > process.argv ["/usr/local/Cellar/node/0.10.13/bin/node" "/Users/dmitry/dev/linksmotif/app.js", "127.0.0.1", "3030", "api-testing"] 

综上所述

Node.js始终将execArgvargv作为单独的值集处理。

在fork之前删除旧的debug-brk参数:

 process.execArgv = process.execArgv.filter(function(o){ var x = "--debug-brk"; return o.substring(0, x.length) !== x }); 

并添加一个新的:

 process.execArgv.push("--debug-brk=9999");