当前位置: 首页 > news >正文

Linux信号机制与docker应用

Linux任务终止信号

在linux系统中,为了终止任务,一般情况下,可能会涉及如下所示的几种信号:

  • SIGTERM

SIGTERM是终止命令kill默认的终止信号。此信号是由应用程序捕获的,使用SIGERM也让程序有机会再退出之前做好清理工作,从而优雅地终止

  • SIGKILL

这是一种不可被捕获或忽略的信号,这是一种可以可靠地杀死进程的方法。由于此信号不会被捕获,可以认为可以很稳定地杀死进程

  • SIGINT

这是用户在按下中断键(一般是ctrl + c)时,终端驱动程序产生的信号,此信号会被发送给前台进程组,一般用于杀死前台的进程

  • SIGQUIT

这是用户按下退出键(一般是ctrl + \)时,终端驱动程序产生信号,此信号会被发送给前台进程组,此信号会结束前台进程,同时产生core文件

signal in docker

在docker使用中,如果想要结束特定的容器一般可以采用docker stop 或 docker kill,那么他们的区别在哪里呢,其实主要的区别在于他们会发送不同的信号

  • docker stop

docker stop是一种相对优雅的终止任务的方法,此命令会发送SIGTERM信号,正常情况下应用程序会做好清理然后退出,在一段时间(grace period)之后,如果进程没有终止,那么会发送SIGKILL强制结束任务

  • docker kill

docker kill 则比较暴力了,直接发送SIGKILL结束任务,简单高效,但是可能导致没法执行数据清理导致的问题

事实上还有一个指令也会导致任务的结束,docker rm -f,一般情况下docker rm用户删除已经停止的容器,而加上 -f 则可以终止运行中的容器。此命令事实上也是发送SIGKILL信号,因此也是暴力直接型的

signal in kubernetes(k8s)

k8s是目前比较火热的多主机的容器化应用,可用通过配置文件进行多主机,多容器的部署与编排,k8s底层是依赖于docker的。在k8s中,更新或关闭pod使用了linux相关的信号机制。下面是关闭时的流程:

  1. A SIGTERM signal is sent to the main process (PID 1) in each container, and a “grace period” countdown starts (defaults to 30 seconds).
  2. Upon the receival of the SIGTERM, each container should start a graceful shutdown of the running application and exit.
  3. If a container doesn’t terminate within the grace period, a SIGKILL signal will be sent and the container violently terminated.

简单说来,k8s中关闭容器时,首先会发送SIGTERM信号,容器收到此信号后,应该做好清理然后退出,在等待一段时间之后(默认是30s),没有退出的容器会收到SIGKILL信号,然后容器就会被强制杀死

因此使用k8s部署的应用中,任务不要过长,否则更新代码时,如果任务不能在30s内完成并退出,可能导致任务处于异常状态。那么如果已经存在长时任务,那么解决方案就是调整SIGTERM到SIGKILL中间等待的时间,将其设置得更长。此时可以调整terminationGracePeriodSeconds参数即可完成。在pod的编排中,设置terminationGracePeriodSeconds: 180,即可将默认等待时间修改为3分钟。

相关文章:

  • OrangePi AIpro初识及使用大模型GPT-Neo-1.3B测试
  • 常见排序算法之插入排序
  • leetcode——169.多数元素(多解法)
  • 回溯算法05(leetcode491/46/47)
  • 消防体验馆升级,互动媒体点亮安全之路!
  • MySQL--复合查询
  • wordpress woocommer 添加代码实现,点击按钮,将产品添加到购物车并且跳转到结账页面
  • 西储大学数据集学习
  • 2024年华为OD机试真题-火星文计算-C++-OD统一考试(C卷D卷)
  • Linux 删除SSH密钥(id_ed25519),重新生成
  • 生成式AI模型大PK——GPT-4、Claude 2.1和Claude 3.0 Opus
  • WPF之TextBlock文本标签
  • nuxt3+Element Plus项目搭建过程记录
  • 【源码】Spring Data JPA原理解析之Repository执行过程及SimpleJpaRepository源码
  • K-独立钻石(dfs),G-邪恶铭刻(贪心)
  • 《Java编程思想》读书笔记-对象导论
  • 2019.2.20 c++ 知识梳理
  • Android框架之Volley
  • Angular 响应式表单 基础例子
  • canvas 高仿 Apple Watch 表盘
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • ES6系统学习----从Apollo Client看解构赋值
  • HTTP那些事
  • java概述
  • js操作时间(持续更新)
  • js算法-归并排序(merge_sort)
  • leetcode386. Lexicographical Numbers
  • Nacos系列:Nacos的Java SDK使用
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • ViewService——一种保证客户端与服务端同步的方法
  • 产品三维模型在线预览
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 突破自己的技术思维
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 详解移动APP与web APP的区别
  • 一、python与pycharm的安装
  • 责任链模式的两种实现
  • 正则与JS中的正则
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ​configparser --- 配置文件解析器​
  • ​iOS安全加固方法及实现
  • ‌JavaScript 数据类型转换
  • # Redis 入门到精通(七)-- redis 删除策略
  • ## 基础知识
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #define,static,const,三种常量的区别
  • (arch)linux 转换文件编码格式
  • (C++哈希表01)
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (简单) HDU 2612 Find a way,BFS。
  • (九)信息融合方式简介
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网