可能重複:
node.js execute system command synchronously如何同步執行node.js文件與節點?
我想同步從另一個node.js的文件執行的node.js文件。這是我的,但它的異步。
var spawn = spawn('node', ['./file.js']);
spawn.stdout.on('data',function(data){});
可能重複:
node.js execute system command synchronously如何同步執行node.js文件與節點?
我想同步從另一個node.js的文件執行的node.js文件。這是我的,但它的異步。
var spawn = spawn('node', ['./file.js']);
spawn.stdout.on('data',function(data){});
從問題下您的意見,這聽起來像你不希望它是同步的,你不關心它的輸出。
如果你只是想開啓另一個過程而忘記,不看它或關心它什麼時候結束,你已經使用了什麼(spawn
)。
如果你想真正發射後不管,你要指定detached
選項,這樣當你的進程終止子進程不會被殺死。從文檔:
如果設置了
detached
選項,子進程將成爲新進程組的引導者。這可以讓孩子在父母退出後繼續跑步。
尋找進一步下跌,顯然你必須unref
它還有:
默認情況下,父母將等待沾邊兒退出。爲了防止父母等待給定的孩子,請使用
child.unref()
方法,並且父母的事件循環不會將孩子包括在其引用計數中。
而顯然對付stdio
:
當使用
detached
選項來啓動一個長期運行的進程,該進程將不會留在後臺運行,除非它具備stdio
配置沒有連接到父母。如果父母的stdio被繼承,則孩子將繼續與控制終端連接。
所以:
spawn('node', ['./file.js'], {
detached: true,
stdio: [ 'ignore', 'ignore', 'ignore' ]
}).unref();
這太棒了,謝謝你爲我挖掘這個。哇。 – ThomasReggi
@ThomasReggi:大聲笑,很高興幫助! –
你真的* *要同步做呢?而不是傾聽['exit' event](http://nodejs.org/api/all.html#all_event_exit_2)?因爲你似乎想用'stdout'做一些事情。如果你同步執行,該行將不會運行,直到孩子*完成* ... –
@ T.J.Crowder我不想要一個響應,我不希望服務器等待一個。我從另一個等待'stdout'的例子中拿出了'stdout'。有沒有更好的功能可以做到這一點,而無需安裝整個模塊? – ThomasReggi
@ThomasReggi:聽起來好像你並不希望它是同步的。我已經添加了一個我希望能夠提供幫助的答案。 –