2012-10-31 18 views
1

Node.js的Exec的问题:

我有一个程序,它会生成多个进程,我想在过程完成时通过捕获PID来记录过程的顺序。从我可以告诉标准回调不包括PID(stdout,stderr和error)。的node.js:是否有child_process.exec的回调函数()的方式返回进程的PID

我想避免使用产卵,但它看起来像我必须,除非任何善良的灵魂有一些想法。

在此先感谢。

编辑:

澄清:

var child = child_process.exec(..., function() { 
    console.log(child.pid); 
}); 

不会为多个进程工作。这将返回最后一个进程,而不是触发回调的进程。

回答

3
var child = child_process.exec(..., function() { 
    console.log(child.pid); 
}); 

我强烈建议阅读the documentation - 你可能会发现你所有的问题在那里。 :)

//编辑如果您使用的是循环创建过程,然后用它这样的:

var create_child = function(i) { 
    // creates a seperate scope for child variable 
    var child = child_process.exec(..., function() { 
     console.log(child.pid); 
    }); 
}; 

for (var i = 0; i < 100; i++) { 
    // does not create a seperate scope 
    create_child(i); 
} 

避免范围的问题。

+0

我应该从澄清开始走(我已经在这个问题这样做了),这并不多进程运行。如果另一个“孩子”开始,那就变成了child.pid,并且之前的pid丢失了。这就是为什么我试图使用回调获得PID。 –

+0

@DanSteingart它定义的作品。如果它返回上一个进程,则需要将所有内容都包含在匿名函数中。向我们展示您的代码,然后向您展示如何使用它,以便它能正常工作。你所说的实际上是一个范围界定问题。 – freakish

+0

啊,好的。我最终在类似的上下文中使用了spawn(无论如何我都想捕获该流,请参阅下面的答案)。 –

1

经过一番搜索和短暂的休息后,我确信child_process.spawn是要走的路。使用对象数组来处理进程,并在退出时删除这些进程对象似乎工作正常。

参见:https://gist.github.com/3990987