java ctrl+c(kill 2)打断过程
来源:互联网 发布:java selenium教程 编辑:程序博客网 时间:2024/06/04 18:46
java ctrl+c(kill 2)打断过程
本文主要介绍用ctrl+c打断java进程后的情况
- 没有shutdown hook
- 存在shutdown hook
当程序不存在shutdown hook的时候
程序会直接退出,即使有线程在跑,也不会产生任何打断信号给线程,例如:
public class BB{ public static void main(String[] args) { Thread t = new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } } }); t.start(); while(true) { try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); System.out.println("interrupted."); } } }}
程序会直接推出,进程资源被回收。
当存在shutdown hook的情况
有shutdownhook,shutdownhook结束后,即使有进程没有结束,进程还是会退出,例如:
public class AA { public static void main(String[] args) { Thread aaa = new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); System.out.println("interrupted."); } } } }); Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override public void run() { } } }, "Data")); aaa.start(); }}
ctrl+c打断后执行shutdown hook,hook时空的,所以很快结束,上面的线程被系统回收。我们正常情况下是在hook中打断线程,并作join操作,做好善后处理:
public class AA { public static void main(String[] args) { Thread aaa = new Thread(new Runnable() { @Override public void run() { while (!Thread.interrupted()) { try { Thread.sleep(1000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); System.out.println("interrupted."); } } } }); Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override public void run() { try{ aaa.interrupt(); aaa.join(); } catch (InterruptedException e) { System.out.println("hhh"); Thread.currentThread().interrupt(); } } }, "Data")); aaa.start(); }}
此时ctrl+c打断后会县打断线程,线程结束后,这个shutdown hook结束,进程结束。
阅读全文
0 0
- java ctrl+c(kill 2)打断过程
- java 捕捉信号(linux下的kill,ctrl+c)
- java 捕捉信号(linux下的kill,ctrl+c)
- C++ 处理 Kill 信号、Ctrl+C信号
- Java命令行程序阻断操作系统Ctrl+C/kill命令等信号
- linux 测试进程指令 fg bg kill ps jobs ctrl+z ctrl+c
- Linux C++ 处理 Kill 信号、Ctrl+C信号,便于安全退出
- ctrl+z ctrl+c ctrl+\ ctrl+d
- ctrl-c,ctrl-z,ctrl-d区别
- ctrl-c,ctrl-z,ctrl-d区别
- Ctrl+C,Ctrl+Z,Ctrl+D
- ctrl-c,ctrl-z,ctrl-d区别
- ctrl-c,ctrl-z,ctrl-d区别
- CTRL+A, CTRL+C, CTRL+V
- ctrl-c,ctrl-z,ctrl-d区别
- Ctrl+C, Ctrl+Z, Ctrl+D
- CTRL-Z和CTRL-C
- 屏蔽Ctrl+V Ctrl+C
- 深度学习基础知识(4):卷积层的实现
- Spring三大核心思想一:IOC
- Java.lang.UnsupportClassVersionError:Unsupported major.minor version 52.0
- 网联整合各大支付_支付行业变天
- VS配置使用NUnits
- java ctrl+c(kill 2)打断过程
- 获取安卓系统版本等各个参数
- Servlet应用程序(2)----基于Filter Dispatcher的MVC
- VBScript 中常见的几种循环
- 使用 Router 实现的模块化,如何优雅的回到主页面
- 静态代理
- Java+opencv3.2.0之删除最小连通区域
- 简单说 !![]==true 与 []==true 引发的思考
- 关于c语言中字符常量,变量的两道经典例题