2012-08-09 60 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