【发布时间】:2021-01-19 02:45:50
【问题描述】:
在 Windows 操作系统中,`` 似乎不会优雅地关闭进程(也就是说,它无助于触发“关闭”挂钩,但我在 C 中找到了解决方案。
因此,Runtime.getRuntime().addShutdownHook(new ShutdownHook()); 不会在 taskkill /F /PID 命令处触发。
有效的“C”代码
#include <stdio.h>
#include <windows.h>
int main(int argc, char* argv[])
{
if (argc == 2) {
unsigned pid = 0;
if (sscanf_s(argv[1], "%u", &pid) == 1) {
FreeConsole(); // AttachConsole will fail if we don't detach from current console
if (AttachConsole(pid)) {
//Disable Ctrl-C handling for our program
SetConsoleCtrlHandler(NULL, TRUE);
GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0);
return 0;
}
}
}
return 1;
}
我的问题是,你如何在纯 Java 中做到这一点,这意味着构建一个 jar 并像这样运行它:java -jar killprocess.jar 1234 其中 1234 是进程 ID。
【问题讨论】:
-
据我所知,JDK 的 API 中没有任何东西可以做到这一点。您需要通过ProcessBuilder 类发出主机操作系统的命令。我认为您误解了关闭挂钩的目的。如果我误解了您的问题,请纠正我。
-
@Fireburn -- 这个问题与你之前提出的这个问题有什么不同? stackoverflow.com/questions/64181947/…
-
@KevinBoone 我认为另一篇文章实际上是在询问“哪个命令”这篇文章有答案,但更普遍地询问有关转换 C 代码的问题,因此我将对其进行编辑并添加“C”标签.