“kill -9”一时爽,秋后算账泪两行
程序员的成长之路
共 2657字,需浏览 6分钟
·
2020-08-14 17:40
阅读本文大概需要 3.5 分钟。
来自:小姐姐味道
kill
是杀死的意思,带有主动的意味。鉴于master
、slave
这样的名词,需要在计算机软件中进行整改,kill这样明显带有负面信息的单词,按理说也需要被干掉。kill
根本就不是杀死的意思。kill -l
可以看到长长的信号列表。kill -9
,我也不知道从哪里来的传承,码农们都喜欢这种暴力性的命令--喜欢用锋利的匕首一击致命。kill -9
的兄弟们,个个都像黑黑的李逵,单纯、暴力、不讲人情。SIGKILL
9
Kill signal
结束信号
kill -9
直接使得优雅关闭
这个名词成了废物。go die
。请求丢失:内存队列中等待执行请求丢失
数据丢失:处于内存缓存中数据未持久化到磁盘
文件损坏:正在写的文件没有没有更新完成,导致文件损坏
业务中断:处理一半的业务被强行中断,如支付成功了,却没有更新到数据库中
服务未下线:上游服务依然往停止节点发送请求
优雅
,靠的是shutdownhook
钩子。就是下面这行代码:Runtime
.getRuntime()
.addShutdownHook(
new Thread(() -> System.out.println("Do something in Shutdown Hook")));
kill -15
发送SIGTERM
信号即可。kill -15
并不能杀死进程,这个时候,才是kill -9
需要出场的时候。kill -15
去尝试杀死进程。如果过一段时间(比如10秒),进程还没有停止,kill -9
才会出场。15
,可以说是很贴心了。但还是有很多人使用9
。kill -15
需要多次确认,而kill -9
一次完事,多数情况下不会出事。有这提高工作效率的事,何乐而不为呢?kill -3
。kill -3
的输出特别有意思,它直接在stdout上输出了jstack
命令所产生的内容。如果是tomcat,那么输出就在canalina.out
文件里。jstack
对你的应用不好使了,或者应用几乎没有响应了。使用kill -3
是一种曲线救国的方式。pid
,第二个参数是等待的秒数。pid=$1
count=$2
n=0
if [ ! -n $count ];then
count=10
fi
while [[ $n -lt $count ]]
do
let "n++"
kill -0 $pid
if [ $? -ne 0 ]
then
echo "program not exist"
break
else
echo "send kill -15 to $pid"
kill -15 $pid
sleep 1
fi
if [[ $n -eq $count ]]
then
echo "kill -9 $pid"
# after 10s , try to send kill -9
kill -9 $pid
fi
done
kill -0
判断进程是否存在,然后持续发送kill -15
指令。等超过指定的秒数,进程依然存在,则最终发送kill -9
命令。kill -9
。推荐阅读:
微信扫描二维码,关注我的公众号
朕已阅
评论