我有一个Java应用程序,我想在Windows中正常关闭。我正在使用.bat文件启动此应用程序,如果我从键盘按CTRL + C,我可以优雅地停止它。在Linux中,可以轻松地向应用程序发送SIGINT / SIGTERM信号。我想在Windows中做类似的事情。
直到现在我已尝试使用批处理文件,但我只能尝试使用taskkill命令突然终止应用程序。
我尝试使用以下命令编写python脚本:
GenerateConsoleCtrlEvent -
GenerateConsoleCtrlEvent(win32con.CTRL_C_EVENT, <my_process_id>)
这种方法的问题在于它需要进程组ID而不是进程ID。我认为它将与进程ID相同。但它没有说参数不正确。
os.kill -
os.kill(pid, signal.CTRL_C_EVENT)
这个命令突然杀死我的进程可能是因为我的进程不是python的子进程。
我尝试使用以下链接中给出的terminate命令使用VBScript执行此操作 - How to terminate process using VBScript
但没有运气。我不想使用像SendKeys这样的第三方应用程序。
现在我正在尝试编写一个可以 -
的程序通过调用
删除关闭挂钩Runtime.getRuntime().removeShutdownHook(<my_thread_name>);
我尝试获取以下链接中提到的线程详细信息 Get a List of all Threads currently running in Java
但是它给了我当前进程中运行的线程。
我在过去2天里遇到了这个问题。有没有办法在Windows中删除java中另一个进程的shutdown hook?
提前致谢!!
更新1 - 我必须实现使用Java 6.
更新2 - 以下链接How to gracefully handle the SIGKILL signal in Java
中给出的答案对我不起作用,因为它建议添加一个关闭钩子,我已经在我的应用程序中。我想通过获取线程名称将其从其他应用程序中删除。