本来是个对个体失效不太敏感的Worker进程
为了尽善尽美决定加个关闭钩子(其实是为了逃避半夜上线找个理由...)
于是开开心心的写了如下代码测试
结果……
灰常不爽……
必须自己实现一个安全关闭
完全不优雅嘛,这样还不行,Worker进程我觉得是不能信任的
一段时间后还得调用process.destroy()还安全
与其这样还不如taskkill搞下?
为了尽善尽美决定加个关闭钩子(其实是为了逃避半夜上线找个理由...)
于是开开心心的写了如下代码测试
String path = "E:/IdeaProjects/WebClipper/out/test/boss/";
Process process =
new ProcessBuilder("java", "ShutdownHookTest")
.directory(new File(path))
.start();
ProcessUtils.drainInBackgroundAndPrint(process.getInputStream());//这里只是输出而已
Thread.sleep(5000l);
process.destroy();
process.waitFor();
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run() {
System.out.println("Hook run.");
}
});
System.out.println("Just test.");
while (true)
Thread.sleep(1000l);
结果……
Just test.
Process finished with exit code 0
灰常不爽……
必须自己实现一个安全关闭
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
bw.write("exit");
bw.flush();
bw.close();
new Thread(){
@Override
public void run() {
try {
new BufferedReader(new InputStreamReader(System.in)).readLine();
} catch (IOException ignored) {
}
System.exit(0);
}
}.start();
完全不优雅嘛,这样还不行,Worker进程我觉得是不能信任的
一段时间后还得调用process.destroy()还安全
与其这样还不如taskkill搞下?