0

我有一个 Sinatra 应用程序正在运行,并且有一些后台线程正在使用赛璐珞运行。当按下Ctrl+时C,我想干净地终止那些正在运行的代理。我如何干净地终止它们?

4

1 回答 1

1

要直接回答您的问题,您的主线程将在 Sinatra 运行时阻塞;一旦它捕获到 SIGINT,它就会跳出它的运行循环,并且你的脚本将继续。所以,你可以有一个像这样的 config.ru:

require './my_app'
run MyApp
Celluloid.shutdown

run将阻塞直到服务器终止,此时赛璐珞应该启动其关闭机制。

然而,话虽如此,值得注意的是赛璐珞将#shutdown通过一个at_exit块自动调用。(https://github.com/celluloid/celluloid/blob/master/lib/celluloid.rb#L138-L154),并且赛璐珞已经提供了一种在演员退出时运行代码的机制,所以如果你已经为你的演员,他们应该干净地关闭,而无需你做任何特别的 WRT Sinatra。

于 2015-03-22T06:36:14.267 回答