gpt4 book ai didi

java - 如果 ShellExecuteEx 的调用者死亡,则停止 JVM windows 进程

转载 作者:太空宇宙 更新时间:2023-11-04 13:53:51 25 4
gpt4 key购买 nike

我创建了一个 java 库,它可以使用管理员权限提升从 JAR 运行的 java 应用程序。在 Linux 上,这工作正常,如果我在 Linux 中按 CTRL-C 退出应用程序,则使用 sudo 启动的提升的应用程序将按预期停止。在 Windows 上这不是行为。当我使用 CTRL-C 退出时,管理员进程继续运行,我需要从任务管理器手动停止它。

查看代码@https://github.com/rritoch/super-user-application/blob/master/src/main/java/com/vnetpublishing/java/suapp/WinSudo.java

如果调用进程终止,例如当用户通过键入 CTRL-C 退出时,如何让使用 JPA/ShellExecuteEx 创建的进程自动终止?

最佳答案

作为此问题的临时解决方案,我添加了一个关闭 Hook 来结束子进程。这不是一个理想的解决方案,因为如果父进程被强制退出,shutdownHook将不会运行并且子进程继续运行,但这确实处理了CTRL-C启动的退出。

    final HANDLE childProcess = execInfo.hProcess;

Thread shutdownHook = new Thread() {
@Override
public void run() {
System.out.println("Terminating child process");
Kernel32.INSTANCE.TerminateProcess(childProcess, 0);
Kernel32X.INSTANCE.CloseHandle(childProcess);
Kernel32X.INSTANCE.CloseHandle(hJob);
}
};

Runtime.getRuntime().addShutdownHook(shutdownHook);

关于java - 如果 ShellExecuteEx 的调用者死亡,则停止 JVM windows 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30030522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com