2012-12-06 24 views
0

可能重複:
node.js execute system command synchronously如何同步執行node.js文件與節點?

我想同步從另一個node.js的文件執行的node.js文件。這是我的,但它的異步。

var spawn = spawn('node', ['./file.js']); 
    spawn.stdout.on('data',function(data){}); 
+0

你真的* *要同步做呢?而不是傾聽['exit' event](http://nodejs.org/api/all.html#all_event_exit_2)?因爲你似乎想用'stdout'做一些事情。如果你同步執行,該行將不會運行,直到孩子*完成* ... –

+0

@ T.J.Crowder我不想要一個響應,我不希望服務器等待一個。我從另一個等待'stdout'的例子中拿出了'stdout'。有沒有更好的功能可以做到這一點,而無需安裝整個模塊? – ThomasReggi

+0

@ThomasReggi:聽起來好像你並不希望它是同步的。我已經添加了一個我希望能夠提供幫助的答案。 –

回答

2

從問題下您的意見,這聽起來像你希望它是同步的,你不關心它的輸出。

如果你只是想開啓另一個過程而忘記,不看它或關心它什麼時候結束,你已經使用了什麼(spawn)。

如果你想真正發射後不管,你要指定detached選項,這樣當你的進程終止子進程不會被殺死。從文檔:

如果設置了detached選項,子進程將成爲新進程組的引導者。這可以讓孩子在父母退出後繼續跑步。

尋找進一步下跌,顯然你必須unref它還有:

默認情況下,父母將等待沾邊兒退出。爲了防止父母等待給定的孩子,請使用child.unref()方法,並且父母的事件循環不會將孩子包括在其引用計數中。

顯然對付stdio

當使用detached選項來啓動一個長期運行的進程,該進程將不會留在後臺運行,除非它具備stdio配置沒有連接到父母。如果父母的stdio被繼承,則孩子將繼續與控制終端連接。

所以:

spawn('node', ['./file.js'], { 
    detached: true, 
    stdio: [ 'ignore', 'ignore', 'ignore' ] 
}).unref(); 
+0

這太棒了,謝謝你爲我挖掘這個。哇。 – ThomasReggi

+0

@ThomasReggi:大聲笑,很高興幫助! –