Tag: shutdown hook

如何实现在执行结束时自动关闭的线程池?

我正在编写一个理论上可以在不同环境中使用的Java客户端:Java main(),servlet容器或dependency injection。 客户端实现内部连接线程池。 这种方法的问题在于,客户端的用户不知道实现内部线程池的事实将使他或她的应用程序在关闭时“挂起”。 我的用户需要知道向库发送shutdown()消息。 我想知道是否可以采取任何其他替代方法,一方面,允许我为我的连接启动一个线程池; 而且,另一方面,捕获一些事件,可能是一个JVM事件,表明JVM正在关闭,这将允许我调用我的shutdown()实现。

关闭tomcat服务器时无法加载org.apache.hadoop.util.ShutdownHookManager

我有一个在tomcat上运行的简单Web应用程序。 此Web应用程序将文件读​​写到HDFS。 我面临的问题是每次使用./bin/shutdown.sh停止服务器时。 我得到无法加载hadoop shutdownHookManagerexception。 我确定hadoop-common(包含ShutDownManager)在tomcat类路径中。 谁能帮我吗? 我得到的例外: Oct 14, 2013 5:57:54 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks SEVERE: The web application [] created a ThreadLocal with key of type [com.ebay.kernel.calwrapper.CalTransactionHelper$1] (value [com.ebay.kernel.calwrapper.CalTransactionHelper$1@3d5a1c5f]) and a value of type [com.ebay.kernel.calwrapper.CalTransactionHelper.Stack] (value [[]]) but failed to remove it when the web application was stopped. Threads are going to be renewed […]

Cygwin CTRL-C(信号中断)无法正常工作 – JVM Shutdown Hooks无法启动

我正在开发一个利用关闭挂钩的Java应用程序,以便清除程序的终止/中断,但我注意到Cygwin的CTRL-C实现似乎没有触发关闭挂钩。 从表面上看,似乎已中断了该过程,将控制权交还给命令行,但是根本不会触发进程的“关闭”挂钩,因此不会发生清理。 在cmd中它们被捕获,但由于各种约束,我需要以某种方式让它们在Cygwin中工作。 有什么方法可以通过Cygwin在正在运行的进程中触发SIGINT,或者可能是我可以用来清理中断和终止的关闭挂钩的替代方法?

如何从C#one正确关闭java应用程序

我有java应用程序,当我使用CTRL-C时正确关闭,java应用程序在关机前保存所有数据。 现在我尝试使用Process.Close()从我的C#控制台应用程序关闭这个java应用程序,但是当我使用它时应用程序不保存任何数据,我也尝试过Process.CloseMainWindow()但是使用它没有发生任何事情,而且Process.Kill()但是使用这个进程刚刚杀死,没有任何问题。 如何从C#控制台应用程序中提高java应用程序的关闭挂钩?

将SIGTERM发送到JVM是否安全

虽然JVM会将SIGTERM和类似信号转换为关闭挂钩 ,但许多服务关闭脚本使用TCP端口启动关闭。 (例如Tomcat的关闭端口, Java Service Wrapper ,JBoss的管理接口等) 所以我认为使用信号和关机钩子来优雅地关闭java服务是不鼓励的,直到我发现Play! 框架是使用关闭挂钩管理服务生命周期, play dist生成的启动脚本假定信号将被发送到JVM的PID。 我知道信号是依赖于平台的,并且使用TCP端口是一种以跨平台方式管理服务的简单且可扩展的方式,但我想知道它是多么安全以及我需要考虑哪些风险,当我依赖时在SIGTERM和关闭挂钩上作为服务关闭的主要方法。

关闭钩子在Eclipse中不起作用

我添加了一个关闭钩子 : Runtime.getRuntime().addShutdownHook(myShutdownHook); 它通常工作正常,但是当我单击Eclipse中的红色停止按钮时却没有。 有没有办法在Eclipse中调用关闭钩子?