linux kill常见信号量 在 Java中的应用kill 常见的信号量kill -l里面只有 9) SIGKILL 信号特别 可以无条件终止进程Java 中的钩子函数Java 中可以使用 注册钩子函数 来监听进程异常退出时候的事件.注册钩子函数publi...
linux kill常见信号量 在 Java中的应用
- kill 常见的信号量
kill -l
里面只有 9) SIGKILL 信号特别 可以无条件终止进程
- Java 中的钩子函数
Java 中可以使用 注册钩子函数 来监听进程异常退出时候的事件.
- 注册钩子函数
public class Main {
public static void main(String[] args) throws InterruptedException {
long i = 0l;
Runtime.getRuntime().addShutdownHook(new Thread( ()->{
out.println(Thread.currentThread().getName()+": shutdown");
}));
for(;;){
i++;
out.println(i);
TimeUnit.MILLISECONDS.sleep(1000);
}
}
}
- 使用 kill pid (默认是SIGTERM信号量)的方式结束进程
很明显触发了 钩子函数
- 我们在使用 kill -9 pid 的信号量试试
使用 9的信号量很明显 没有触发钩子函数(所以线网应用为了平滑关闭最好不要使用 9 的信号量)
- 使用kill -3 试试
可以看到输出了JVM 线程栈的信息 还有整个堆的情况 但是钩子函数没有调用,而且进程也没有退出.
- 我们在试试 kill -(1|2) pid 的效果
看来跟 -15 信号量是一样的效果
更多的信号量 大家可以自己试试
## Java 实现监听信号量 >Q: 如果我们自己要监听kill 的信号量 要怎么办呢。 > A: 实现 SignalHandler 接口的handle 方法
public class CatchSign implements SignalHandler {
@Override
public void handle(Signal signal) {
out.println(signal.getName()+":handle");
}
public static void main(String[] args) throws Exception {
CatchSign cs = new CatchSign();
Signal.handle(new Signal("IO"),cs);
System.in.read();
}
- 使用 kill -23 pid 试试
触发了handle方法了
- 使用中的意外
如果注册了JVM中已存在的信号量 就会出现下面的异常了.
这里随便说下 上文中 kill -3 信号量的输出就是JVM中已经注册了的
沃梦达教程
本文标题为:linux kill常见信号量 在 Java中的应用
基础教程推荐
猜你喜欢
- Java文件管理操作的知识点整理 2023-05-19
- Java并发编程进阶之线程控制篇 2023-03-07
- java基础知识之FileInputStream流的使用 2023-08-11
- java实现多人聊天系统 2023-05-19
- Java数据结构之对象比较详解 2023-03-07
- springboot自定义starter方法及注解实例 2023-03-31
- Java实现查找文件和替换文件内容 2023-04-06
- Java实现线程插队的示例代码 2022-09-03
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02