经由过程 kill -l 查看linux支撑哪些旌旗灯号:
一、媒介
在我们进行体系进级的时刻,往往须要封闭我们的应用,然后重启。在封闭应用前,我们欲望做一些前置操作,比如封闭数据库、redis连接,清理zookeeper的临时节点,释放分布式锁,持久化缓存数据等等。
在linux上,我们封闭过程主如果应用 kill 的方法。
当履行该敕令今后,linux会向过程发送一个旌旗灯号,过程收到今后之后,可以做一些清理工作。
kill 敕令默认的旌旗灯号值为 15 ,即 SIGTERM 旌旗灯号。

linux供给了 signal() api,可以将旌旗灯号处理函数注册上去:
- #include <signal.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <stdbool.h>
- static void gracefulClose(int sig)
- {
- printf("履行清理工作\n");
- printf("JVM 已封闭\n");
- exit(0); //正常封闭
- }
- int main(int argc,char *argv[])
- {
- if(signal(SIGTERM,gracefulClose) == SIG_ERR)
- exit(-1);
- printf("JVM 已启动\n");
- while(true)
- {
- // 履行工作
- sleep(1);
- }
- }
三、Java供给的Shutdown Hook
在JVM封闭前,会并发履行各个Hook线程。
- public class ShutdownHook {
- public static void main(String[] args) throws InterruptedException {
- Runtime.getRuntime().addShutdownHook(new DbShutdownWork());
- System.out.println("JVM 已启动");
- while(true){
- Thread.sleep(10L);
- }
- }
- static class DbShutdownWork extends Thread{
- public void run(){
- System.out.println("封闭数据库连接");
推荐阅读
买与卖2017年数据中间市场处于持续变更的状况。客户加快向云端迁徙带来的压力,再加上部件缺乏,使得数据中间>>>详细阅读
本文标题:常见Java应用如何优雅关闭
地址:http://www.17bianji.com/lsqh/39920.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示