本来是个对个体失效不太敏感的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搞下?
分享到:
相关推荐
Posted on 2013年02月26日 by U3d / Unity3D脚本/插件/被围观 269 次 假如Unity3D中游戏的魔法有一个持续时间效果,例
//当按下Ctrl将从游戏物体删除名为FooScript的脚本function Update () {if (Input.GetButton ("Fire1")
通常CDR文件都是经过压缩后保存在磁盘的,该程序可以直接读取经过压缩后的CDR文件,不需要把它首先解压缩,然后再解码,进一步提供效率。同时,这个程序也支持压缩输出文件,为用户提供方便。目前支持的压缩格式有...
通常CDR文件都是经过压缩后保存在磁盘的,该程序可以直接读取经过压缩后的CDR文件,不需要把它首先解压缩,然后再解码,进一步提供效率。同时,这个程序也支持压缩输出文件,为用户提供方便。目前支持的压缩格式有...
通常CDR文件都是经过压缩后保存在磁盘的,该程序可以直接读取经过压缩后的CDR文件,不需要把它首先解压缩,然后再解码,进一步提供效率。同时,这个程序也支持压缩输出文件,为用户提供方便。目前支持的压缩格式有...
32 3 Quality through Continuous Improvement Process . . . . . . . . . . . 41 Contribution of Edward Deming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Role of Statistical ...
oldimg.Destroy(); return false; } int nPreMode = ::SetStretchBltMode(newimg.GetDC(), HALFTONE); newimg.ReleaseDC(); oldimg.Draw(newimg.GetDC(), 0, 0, nWidth, nHeight, 0, 0, oldimg.GetWidth(), ...
麋鹿公式执照版本控制建造 用于ELK(Elasticsearch,Logstash,Kibana)堆栈的SaltStack公式。可用状态状态内容描述elk.config 配置ELK。... elk.service.elasticsearch 部署... elk.service.kibana.destroy 销毁Kibana
第35讲:智能温度测量系统(综合实验)c python import RPi.GPIO as GPIO import importlib import time import sys # BOARD pin numbering LedR = 11 LedG = 12 LedB = 13 ...#ds18b20 = '28-031467805fff'... destroy()
luckysheet源码包
process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and many iterations to get reader feedback, pivot until you have the right book and build traction once ...
this.node.destroy(); } }, /** * 当碰撞产生的时候调用 * @param {Collider} other 产生碰撞的另一个碰撞组件 * @param {Collider} self 产生碰撞的自身的碰撞组件 */ onCollisionEnter: ...
AndroidKeyValueStore A KV store base on sqlite for Android Application. Inspired by YTKKeyValueStore. ...Destroy when app is down: KVStore.destroy() Then you can use like this: KVStore.ge
destroy an object .................. 45 Scoping ........................................ 45 Scope of objects ........................... 46 Creating new data types: class ................................
SpyBot-Search & Destroy 是专门用来清理间谍程序的工具。一些间谍程序随着共享软件安装到您的电脑中,监视您的电脑运行。到目前为止,他已经可以检测一万多种间谍程序 (Spyware),并对其中的一千多种进行免疫处理...
一个桌面发泄工具,很好玩。就是砸桌面的
print("destroy") if surface.thread_run: surface.thread_run = False surface.thread.join(2.0) win.destroy() if __name__ == '__main__': win = tk.Tk() surface = Surface(win) # close,退出输出...
$ npm install process-stats --save 作为CLI $ npm install process-stats --global 或者 $ npx process-stats 用法 const procStats = require ( 'process-stats' ) ( ) // print collector stats console . log ...
使用方法: uses WLFtp; procedure TForm1.Button1Click(Sender: TObject); var ftp1: TWLFtp; begin ftp1:=TWLFtp.Create; ftp1.Host:='192.168.1.200'; ftp1.UserName :='FTP用户名';... ftp1.Destroy ; end;