从subprocess获取正确的进程ID

所以,我产生了一些进程,并试图找出进程的PID,当它得到一些数据,这是我的代码:

var mod_child_process = require('child_process'); var mod_events = require('events'); for (var i=0; i<3; ++i) { var childProcess; childProcess = mod_child_process.spawn('HandShake.exe', ['N:192.168.200.250:3001:1', 'Q:TIME']); childProcess.stdout.on('data', function(data) { console.log('stdout (' + childProcess.pid + '): ' + data); }); } 

它总是返回一个单一的PID

 stdout (78748): 18/7/13 15:46:26 stdout (78748): 18/7/13 15:46:26 stdout (78748): 18/7/13 15:46:27 

提前致谢。

你正在运行一个variableschildProcess的范围问题。 JavaScript中的variables是函数的作用域。 正因为如此,这个variables并不是唯一的循环。

代码行为的简单例子:

 for (var i = 0; i < 3; ++i) { var someNumber = i; setTimeout(function() { console.log(someNumber); }, 100); } 

输出: 2, 2, 2

修复:

 for (var i = 0; i < 3; ++i) { (function() { var someNumber = i; setTimeout(function() { console.log(someNumber); }, 100); })(); } 

你想把你的逻辑封装在一个闭包中,以便在该范围内存在variableschildProcess 。 上面的代码输出预期的0, 1, 2

看起来像一个封闭的问题。 将循环variables传递给函数,以便范围不受影响。

 var mod_child_process = require('child_process'); var mod_events = require('events'); for (var i=0; i<3; ++i) { var childProcess; childProcess = mod_child_process.spawn('cmd.exe'); displayid(childProcess); } function displayid(childProcess){ childProcess.stdout.on('data', function(data) { console.log('stdout (' + childProcess.pid + '): ' + data); }); } 

输出是

 stdout (368): Microsoft Windows [Version 6.2.9200] stdout (20268): Microsoft Windows [Version 6.2.9200] stdout (15728): Microsoft Windows [Version 6.2.9200] 

没有它

 stdout (10964): Microsoft Windows [Version 6.2.9200] stdout (10964): Microsoft Windows [Version 6.2.9200] stdout (10964): Microsoft Windows [Version 6.2.9200]