删除另一个Java进程的Shutdown Hook

时间:2016-11-18 07:04:32

标签: java windows shutdown-hook application-shutdown

我有一个Java应用程序,我想在Windows中正常关闭。我正在使用.bat文件启动此应用程序,如果我从键盘按CTRL + C,我可以优雅地停止它。在Linux中,可以轻松地向应用程序发送SIGINT / SIGTERM信号。我想在Windows中做类似的事情。

直到现在我已尝试使用批处理文件,但我只能尝试使用taskkill命令突然终止应用程序。

我尝试使用以下命令编写python脚本:

  1. GenerateConsoleCtrlEvent -

    GenerateConsoleCtrlEvent(win32con.CTRL_C_EVENT, <my_process_id>)
    

    这种方法的问题在于它需要进程组ID而不是进程ID。我认为它将与进程ID相同。但它没有说参数不正确。

  2. os.kill -

    os.kill(pid, signal.CTRL_C_EVENT)
    

    这个命令突然杀死我的进程可能是因为我的进程不是python的子进程。

  3. 我尝试使用以下链接中给出的terminate命令使用VBScript执行此操作 - How to terminate process using VBScript

    但没有运气。我不想使用像SendKeys这样的第三方应用程序。

    现在我正在尝试编写一个可以 -

    的程序
    1. 获取在我的应用程序创建的java进程中运行的线程列表。
    2. 获取我想要传递的线程的名称作为removeShutdownHook(thread_name)的参数
    3. 通过调用

      删除关闭挂钩
      Runtime.getRuntime().removeShutdownHook(<my_thread_name>);
      
    4. 我尝试获取以下链接中提到的线程详细信息 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

      中给出的答案

      对我不起作用,因为它建议添加一个关闭钩子,我已经在我的应用程序中。我想通过获取线程名称将其从其他应用程序中删除。

0 个答案:

没有答案