2012-08-09 59 views
7

我正在使用node.js,並且我希望在有類似./calculate之類的網址的請求時啓動一個新進程來進行這些複雜計算,並且我希望該進程繼續進行,即使調用它的腳本已經完成。 這可能嗎?在nodejs上啓動新進程

謝謝。

回答

3

您可以使用本機提供的子進程設施: http://nodejs.org/api/child_process.html

,並使用UNIX「的nohup」命令,以保持生成的進程,即使父進程死亡活着。

+1

談論性能,這是一個很好的決定嗎?謝謝 – Mario 2012-08-10 03:04:06

+0

您是否正在尋找在創建它的同一個連接中返回的子進程工作的結果? – Roman 2012-08-10 08:10:20

+1

您可以聰明一點,創建一個童工池,並通過數據庫中的隊列與他們進行交流(比如說使用類似Redis的東西),這可以非常靈活和靈活。您可能會覺得有用的幾個鏈接: http://stackoverflow.com/questions/5630208/nodejs-child-processes-exec-can-not-return-nohup-command http://stackoverflow.com/questions/ 4762016/node-js-workers-background-processes – Roman 2012-08-10 08:16:21

3

有不同的方法。可以使用https://github.com/pgriess/node-webworker

或者更好http://nodejs.org/docs/latest/api/cluster.html#cluster_cluster

這些解決方案是,如果你想要做一個節點子,你也可以簡單地生成一個新的節點工藝,等待輸出(http://nodejs.org/api/all.html#all_child_process_spawn_command_args_options),但節點-webworker是解決方案的一個包裝,並且更清潔。

+0

但我不會等待。我想調用子進程而不是更多。我的意思是,如果主腳本死亡或http服務器結束,我希望子進程繼續。謝謝。 – Mario 2012-08-10 03:03:05

1

所以在你最後的評論我知道更好地理解你想要做什麼。

你想生成進程而不是子進程。做到這一點的最好和更清潔的方式是使用某種魔鬼來運行它們。

看一看永遠:
https://github.com/nodejitsu/forever
https://github.com/nodejitsu/forever-monitor

這可能是你的完美工具。我從來沒有用編程式,只是cli。但這是我想要看的。

+0

非常感謝你,但是我發現這個命令nohup對我有好處;) – Mario 2012-08-13 15:56:39

+1

有時簡單就足夠了:D – 3on 2012-08-13 17:09:04