我创建了一个java库,它提升了从具有管理员权限的JAR运行的java应用程序。在linux上这很好用,如果我通过在linux中按CTRL-C退出应用程序,升级的应用程序就会按照预期停止sudo停止。在Windows上,这不是行为。当我使用CTRL-C退出时,管理员进程继续运行,我需要从任务管理器手动停止它。
如果调用进程终止,如何通过键入CTRL-C退出用户,如何使用JPA / ShellExecuteEx创建的进程自动终止?
答案 0 :(得分:0)
作为此问题的临时解决方案,我添加了一个关闭钩子来结束子进程。这不是一个理想的解决方案,因为如果强制退出父进程,则不会运行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);