本来是个对个体失效不太敏感的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搞下?
分享到:
相关推荐
在Unity3D游戏开发中,`Object.Destroy`函数是一个至关重要的功能,用于在运行时动态地从场景中移除游戏对象、组件或者资源。这个功能的使用灵活性极高,可以优化性能,减少不必要的计算负担,特别是在处理临时性...
在Unity3D中,开发游戏时常常需要监听游戏对象(GameObject)的生命周期事件,特别是当对象被销毁(Destroy)时,可能需要执行某些清理工作或触发相关联的逻辑。标题和描述提到的问题是关于如何在Gameobject被销毁时...
在Java编程语言中,`Process`类是处理操作系统进程的核心组件。它允许Java应用程序与操作系统交互,执行外部命令,例如运行系统工具或者控制其他应用程序。本文将深入探讨`JAVA Process`的使用,以及如何通过Java...
Java.lang.Process 类深入研究 Java.lang.Process 类是 Java 类库中的一个核心部分,它提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。下面将对 Process 类...
通常CDR文件都是经过压缩后保存在磁盘的,该程序可以直接读取经过压缩后的CDR文件,不需要把它首先解压缩,然后再解码,进一步提供效率。同时,这个程序也支持压缩输出文件,为用户提供方便。目前支持的压缩格式有...
通常CDR文件都是经过压缩后保存在磁盘的,该程序可以直接读取经过压缩后的CDR文件,不需要把它首先解压缩,然后再解码,进一步提供效率。同时,这个程序也支持压缩输出文件,为用户提供方便。目前支持的压缩格式有...
通常CDR文件都是经过压缩后保存在磁盘的,该程序可以直接读取经过压缩后的CDR文件,不需要把它首先解压缩,然后再解码,进一步提供效率。同时,这个程序也支持压缩输出文件,为用户提供方便。目前支持的压缩格式有...
执行命令后返回一个`java.lang.Process`对象,通过该对象可以获取命令执行的输出、错误流以及控制进程的生命周期(如终止进程)。 2. **调用DOS命令**: 调用DOS命令通常涉及到以下步骤: - **创建Runtime对象**...
- 关闭钩子的执行顺序是不确定的,因此不应依赖它们之间的相对执行时间。 2. **Tomcat中的关闭钩子**: - Tomcat利用关闭钩子来执行服务停止时的清理任务,如卸载Web应用程序、关闭网络连接、停止后台线程等。 -...
在Java中,我们不能直接操作底层的进程,但可以通过`java.lang.ProcessBuilder`类来创建和管理外部进程。例如,可以使用`ProcessBuilder.start()`方法来启动一个新的进程,`Process.waitFor()`方法来等待进程完成,...
32 3 Quality through Continuous Improvement Process . . . . . . . . . . . 41 Contribution of Edward Deming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Role of Statistical ...
process.destroy(); return null; } private static String queryValue(String string, String method) throws IOException { String path = "cmd /c reg query " + string + " /v " + method; Process ...
在本项目中,"基于C++&QT钩子实现屏蔽系统按键、任务管理器、任务栏的实例.zip",我们探讨的是如何利用C++编程语言和QT库来创建一个应用程序,该程序能够拦截并控制系统的特定行为,如阻止用户按下某些键、禁用任务...
在Java中,`java.lang.ProcessBuilder`类和`java.lang.Process`接口是进行进程交互的核心工具。`ProcessBuilder`用于创建新的操作系统进程,并允许设置命令行参数、工作目录和环境变量。一旦启动,它将返回一个`...
标题“destroy”所指的可能是一款名为“桌面破坏”(Desktop Destroy)的软件,它作为一个发泄工具,让用户可以通过虚拟的方式“砸桌面”,从而在电脑上体验一种减压的乐趣。这款软件的设计理念是为了提供一种轻松的...
然后,你需要确保在Vue的`mounted`生命周期钩子中初始化Luckysheet,因为在这个阶段,DOM已经准备就绪,可以安全地操作。例如: ```javascript export default { name: 'YourComponent', data() { return { ...
在C#中,`System.Diagnostics.Process.Start()`方法可以用来启动新的进程;而在Python中,我们可以使用`os.system()`或`subprocess`模块来启动进程。 2. **关闭进程**:同样,关闭进程也需要对应的语言API。Java中...
oldimg.Destroy(); return false; } int nPreMode = ::SetStretchBltMode(newimg.GetDC(), HALFTONE); newimg.ReleaseDC(); oldimg.Draw(newimg.GetDC(), 0, 0, nWidth, nHeight, 0, 0, oldimg.GetWidth(), ...
标题中的“acsociative_destroy.rar”可能是一个错误的拼写,根据上下文,可能是与MATLAB和Android开发相关的项目文件。"MATLAB destroy_android开发"这部分描述可能指的是使用MATLAB进行Android应用程序的开发或者...
process.destroy(); } } ``` #### 示例:读取外部程序的输出 当需要与外部程序交互时,可以通过`exec`方法返回的`Process`对象的`getInputStream()`、`getOutputStream()`和`getErrorStream()`方法来获取输入输出...