`
mayday85
  • 浏览: 45648 次
  • 性别: Icon_minigender_1
  • 来自: 污点星狗屎国
文章分类
社区版块
存档分类
最新评论

[吐槽]process.destroy()不能触发关闭钩子

 
阅读更多

本来是个对个体失效不太敏感的Worker进程
为了尽善尽美决定加个关闭钩子(其实是为了逃避半夜上线找个理由...)

于是开开心心的写了如下代码测试

        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搞下?
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics