System.exit 在 "sbt run" 中工作但不在 .jar 中工作
System.exit working in "sbt run" but not in .jar
当关闭我的程序时,我需要让我的 akka actor 在关闭之前完成他们正在做的事情,所以我有一个关闭钩子:
sys.addShutdownHook(
{
log.info("\n shutting down startWorkScheduler\n")
assignWorkScheduler.cancel()
log.info("\ntelling manager to shutdown gracefully\n")
manager ! Manager.ShutdownGracefully
//spam shutdown messages until we exit
val resendShutDown = system.scheduler.schedule(5 seconds, 2 seconds){
manager ! Manager.ShutdownGracefully
}
system.awaitTermination()
}
我在其他地方等待 "all ok, you can shutdown" 消息:
case Terminated(httpDlrSqlRouter) => {
println("received terminated message from http router")
if(shuttingDown) {
println("httpDlrRouter done, shutting down......")
log.info("httpDlrRouter done, shutting down......")
context.system.shutdown()
java.lang.System.exit(0)
}else{
log.warning("httpDlrRouter terminated, don't know why!")
}
}
当我 运行 使用 sbt run
的代码时,它按预期工作:kill 或 CTRL+c 完成工作,打印 "httpDlrRouter done, shutting down......" 并退出。
当我使用 sbt assembly
构建 .jar 并使用 java -jar filename.jar
运行 时,它会做同样的事情 除了 实际上退出,它只是挂起,直到我用 kill -9
杀死它
我是否需要 System.exit
的任何替代方案或一些配置才能使其正常工作?
明显改变
java.lang.System.exit(0)
至
Runtime.getRuntime().halt(0)
解决了问题
当关闭我的程序时,我需要让我的 akka actor 在关闭之前完成他们正在做的事情,所以我有一个关闭钩子:
sys.addShutdownHook(
{
log.info("\n shutting down startWorkScheduler\n")
assignWorkScheduler.cancel()
log.info("\ntelling manager to shutdown gracefully\n")
manager ! Manager.ShutdownGracefully
//spam shutdown messages until we exit
val resendShutDown = system.scheduler.schedule(5 seconds, 2 seconds){
manager ! Manager.ShutdownGracefully
}
system.awaitTermination()
}
我在其他地方等待 "all ok, you can shutdown" 消息:
case Terminated(httpDlrSqlRouter) => {
println("received terminated message from http router")
if(shuttingDown) {
println("httpDlrRouter done, shutting down......")
log.info("httpDlrRouter done, shutting down......")
context.system.shutdown()
java.lang.System.exit(0)
}else{
log.warning("httpDlrRouter terminated, don't know why!")
}
}
当我 运行 使用 sbt run
的代码时,它按预期工作:kill 或 CTRL+c 完成工作,打印 "httpDlrRouter done, shutting down......" 并退出。
当我使用 sbt assembly
构建 .jar 并使用 java -jar filename.jar
运行 时,它会做同样的事情 除了 实际上退出,它只是挂起,直到我用 kill -9
我是否需要 System.exit
的任何替代方案或一些配置才能使其正常工作?
明显改变
java.lang.System.exit(0)
至
Runtime.getRuntime().halt(0)
解决了问题