2012-10-31 49 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