kill命令在Java应用中使用的注意事项小结

作者:冬眠的山谷 时间:2023-11-11 13:01:55 

前言

我们都知道,kill在linux系统中是用于杀死进程。

kill pid [..]

kill命令可将指定的信号发送给相应的进程或工作。 kill命令默认使用信号为15,用于结束进程或工作。如果进程或工作忽略此信号,则可以使用信号9,强制杀死进程或作业.

因此,如果确保将进程杀死,可以使用-9参数

kill -9 pid [..]

linux 中常见的信号

 1   SIGHUP             挂起进程

 2   SIGINT               终止进程

 3   SIGGQUIT  停止进程

 9   SIGKILL  无条件终止进程

15  SIGTERM          尽可能终止进程

17  SIGSTOP           无条件停止进程,但不是终止

18  SIGTSTP停止或者暂停进程,但不终止进程

19 SIGCONT继续运行停止的进程

在Java中的应用

创建一个SpringBoot的web应用

启动类如下,添加了一个钩子函数,当进程关闭时,将会调用该钩子函数。


@SpringBootApplication
public class WebApplication {
public static void main(String args[]){
SpringApplication.run(WebApplication.class,args);
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run() {
System.out.println("do ShutdownHook.......... ");
}
});
}
}

使用maven打包。


mvn package

测试kill -3

启动应用

这里注意,如果使用相对路径启动应用,则jps看到的进程名称为jar,使用绝对路径如下则显示完整的jar名称:web-1.0.jar。


java -jar ~/aProject/web/target/web-1.0.jar

查看进程pid


lgj@lgj-Lenovo-G470:~/aProject/web/target$ jps | grep web
21060 web-1.0.jar

使用kill -3 


lgj@lgj-Lenovo-G470:~/aProject/web/target$ kill -3 21060

可以看到启动界面打印了Java应用的堆栈信息。打印的是收到-3信号时刻的线程信息。

kill命令在Java应用中使用的注意事项小结

如果使用以下方式启动应用


nohup java -jar ~/aProject/web/target/web-1.0.jar &

lgj@lgj-Lenovo-G470:~/aProject/web/target$ ls -l |grep nohup.out
-rw------- 1 lgj lgj 22811 Jun 9 00:41 nohup.out

可以看到启动所在的目录多了一个文件nohup.out。该文件记录了应用启动运行过程中的日志。

nohup 命令& ;

&表示以后台方式运行应用。但如果退出关闭启动的控制台,进程将会停止。

nohup + &也是以后台方式运行应用,但是退出关闭启动的控制台,进程不会停止。且进程日志将会输出到nohup.out中。

此时使用kill -3。打印的线程信息可以到该nohup.out中查看。

测试kill 和kill -9

启动应用


java -jar ~/aProject/web/target/web-1.0.jar

使用kill pid杀死进程


lgj@lgj-Lenovo-G470:~/aProject/web/target$ jps | grep web
21470 web-1.0.jar
lgj@lgj-Lenovo-G470:~/aProject/web/target$ kill 21470
lgj@lgj-Lenovo-G470:~/aProject/web/target$

可以看到输出日志中输出了钩子函数中所打印的

do ShutdownHook..........

2019-06-09 01:18:28.610  INFO 21470 --- [           main] com.demo.web.WebApplication              : Started WebApplication in 4.585 seconds (JVM running for 5.274)
do ShutdownHook..........
2019-06-09 01:18:41.381  INFO 21470 --- [       Thread-3] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'

使用kill  -9  pid杀死进程


lgj@lgj-Lenovo-G470:~/aProject/web/target$ jps | grep web
21568 web-1.0.jar
lgj@lgj-Lenovo-G470:~/aProject/web/target$ kill -9 21568

最后的日志并没有输出钩子函数中的内容

2019-06-09 01:20:37.579  INFO 21568 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8452 (http) with context path ''
2019-06-09 01:20:37.585  INFO 21568 --- [           main] com.demo.web.WebApplication              : Started WebApplication in 4.171 seconds (JVM running for 4.812)
Killed
 

总结

在使用kill操作java应用时

1.kill -3 pid可以打印当前进程的线程信息,但是不会关闭Java应用!

2.kill pid 也就是kill -15 pid ,将会调用钩子函数ShutdownHook,一般ShutdownHook中会进行一些操作,比如保存数据,关闭连接等。

3.kill  -9 pid.不会调用钩子函数ShutdownHook。好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值。

来源:https://www.cnblogs.com/lgjlife/p/10992395.html

标签:kill,命令,java
0
投稿

猜你喜欢

  • Mybatis通过Spring完成代理类注入的流程分析

    2023-10-25 00:55:55
  • C#定时关闭窗体实例

    2023-07-09 22:53:25
  • SSH框架网上商城项目第10战之搭建商品类基本模块

    2023-11-12 14:00:29
  • C#实现回文检测的方法

    2022-12-26 22:31:23
  • java根据不同的参数调用不同的实现类操作

    2021-11-08 17:05:16
  • C#及WPF获取本机所有字体和颜色的方法

    2022-12-23 01:23:13
  • Java线程池必知必会知识点总结

    2021-07-30 13:08:02
  • JVM代码缓存区CodeCache原理及用法解析

    2023-08-09 06:02:29
  • Repeater中添加按钮实现点击按钮获取某一行数据的方法

    2022-05-17 08:19:31
  • 解决FeignClient重试机制造成的接口幂等性

    2022-01-25 11:10:35
  • SpringBoot MongoDB与MongoDB GridFS基本使用

    2023-07-31 06:26:47
  • 在Mybatis中使用自定义缓存ehcache的方法

    2022-02-24 17:27:35
  • 打造酷炫的AndroidStudio插件

    2021-07-27 03:06:42
  • springcloud feign调其他微服务时参数是对象的问题

    2023-01-23 06:24:04
  • C#中面向对象编程机制之继承学习笔记

    2023-12-12 03:46:43
  • C语言运用函数指针数组实现计算器功能

    2023-10-01 18:45:25
  • MyBatis逆向工程的创建和使用

    2022-07-18 20:07:55
  • C++优先队列用法案例详解

    2022-10-23 17:35:01
  • Java基础之创建虚拟机对象的过程详细总结

    2022-07-07 14:24:29
  • Android使用httpPost向服务器发送请求的方法

    2021-12-08 19:37:07
  • asp之家 软件编程 m.aspxhome.com