浏览 3811 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-11-17
本来是个对个体失效不太敏感的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搞下? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |