[英]System.exit working in “sbt run” but not in .jar
关闭我的程序时,我需要让我的akka演员在关闭之前完成他们正在做的事情,所以我有一个关闭钩子:
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()
}
在其他地方,我等待“一切正常,您可以关机”消息:
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
运行代码时,它按预期sbt run
:杀死或CTRL + c完成工作,打印“ httpDlrRouter完成,关闭...”并退出。
当我使用sbt assembly
构建.jar并使用java -jar filename.jar
运行它时, 除实际退出外,它的作用相同,它一直挂着,直到我用kill -9
杀死它为止
我需要System.exit
任何替代方案或一些配置以使其正常工作吗?
明显改变
java.lang.System.exit(0)
至
Runtime.getRuntime().halt(0)
解决了问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.