kill 进程_新手程序员登录服务器杀进程!高级:你别再瞎Kill进程服务了

50b42b339d40c856b143409c8d71dd64.gif

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

kill pid [..]

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

fd6f81a8609c3cf4a447d2153851a481.png

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

kill -9 pid [..]

而使用-3参数,可以 打印进程的执行日志

kill -3 pid

在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信号时刻的线程信息。

134b73c98496f630f30a6d29b7b2d225.png

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

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 命令 & ;

表示以后台方式运行应用。

此时使用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。

5fecde4955308f410fd3b3385465035d.gif 来都来了,走啥走,留个言呗~

 IT大咖说  |  关于版权 

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!

感谢您对IT大咖说的热心支持!

相关推荐

推荐文章

  • 永远不要在代码中使用“User”这个单词

  • 程序员一定能用到的git命令:分支+暂存+回退+标签+创建项目仓库

  • 面试官:Redis有几种数据类型,详细说一下每种数据类型的使用场景

最近活动

  • 第四届MAD技术论坛来袭!带你漫步云端,看见未来!

  • 2019第四届SSC安全峰会

  • 第三届工业大数据创新竞赛答辩倒计时

b5301ec6ffc8f0a6a00b87f6755fd8ed.gif点击【阅读原文】更多IT技术圈干货等你挖掘

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值