我的进程去哪儿了,谁杀了我的进程

2023-10-29

  

  曾经在我眼前,却又消失不见,这是今天的第六遍。

  一段感情,我们希望它能够天长不久,越稳定越好,最怕的就是中途夭折,无疾而终。

  即使不能到海枯石烂的一天,我们也希望好聚好散,大家理智的告别,然后笑着活下去。

  

  况且,我们时候,我们只是希望给这段感情按下一个暂停键,大家先冷静思考自己的问题,然后重新继续。

  最让人抓狂的是突然就联系不上另一半,不接你电话、不回你短信、消息在你的世界。而你根本不知道原因,可能是因为在约会的时候你没有夸她新买的鞋子漂亮;也许是你多看了路边的美眉两眼;也许是出现了更强有力的竞争者;也许是她的父母觉得程序员太屌丝,不愿意你们继续来往;也许是她得了不治之症,不想连累你。总之,你不知道哪里出了问题,惶惶不可终日。

  

  好吧,这里不是情感专栏,我是一个程序员,咱说点有关服务器程序的事情,准确一点,是指服务端进程,后文不加区分。

 

  服务端的程序,一般都希望比较长时间的运行,比如7*24小时。不过,程序也需要更新,比如修Bug,比如增加新功能,比如修复增加新功能引入的bug。

  一个大型系统一般包含多个进程,同一个服务也可能是有多个进程组成,那么可以将这组进程逐步更新:先让一部分进程停止提供服务,等待已有的请求都完毕之后,重启这些服务,然后再更新替他进程。

  即使,我们需要关闭所有服务,也需要优雅(graceful)地停止这些进程。所谓的优雅,就是保证已有的请求都能处理完,需要持久化的状态、数据都保存成功,然后再结束进程,一般来说,可以通过发送信号或者通过哨兵(sentinel)来结束。

  只要是预期内的进程结束,那么都是ok的。而预期之外的进程结束往往令程序员抓狂,线上服务器的问题往往意味着分分钟几位数的损失、KPI、年终奖......想想就很恐怖。

  本文地址:http://www.cnblogs.com/xybaby/p/8098229.html

Linux Signal

  一个进程的异常终止,通常有两种情况,一种是crash,另一种是被kill掉了。

  crash是指程序出现了自己无法解决的异常情况,只能终止,比如Python语言抛出了一个未被捕获的异常,就会结束程序。对于C、C++,最有名的就是段错误(segmentation fault),如果在Linux下面,那么会生成coredump,程序员通过gdb(有可能)可以分析出crash的原因。当然,要生成coredump也是需要正确的设置,可以通过ulimit(ulimit -c)查看或者设置。

  而进程被kill掉,就是其他进程给目标进程发送了信号(signal),当然也可以是自己给自己发的信号,而目标进程没有正确处理这些信号,或者根本没有机会(权力)处理这些信号,那么目标进程就有可能会终止。

  信号是Unix-like系统进程间通信(IPC)的一种方式,这种通知是异步的,信号是一种软中断,操作系统会将目标进程的正常执行流程暂停,然后处理信号。如果目标进程注册了相应的信号处理函数(signal handler),那么就会调用这个signal handler,否则会执行默认的信号处理函数。

  不同的操作系统,支持的信号可能略有差异,可以使用kill -l 查看系统所有的信号。下面是Linux上常见的信号以及处理机制

  信号    值 处理动作 发出信号的原因 
  ---------------------------------------------------------------------- 
  SIGHUP  1   A   终端挂起或者控制进程终止 
  SIGINT   2   A   键盘中断(如break键被按下) 
  SIGQUIT   3   C   键盘的退出键被按下 
  SIGILL    4   C   非法指令 
  SIGABRT  6   C   由abort(3)发出的退出指令 
  SIGFPE    8   C   浮点异常 
  SIGKILL  9   AEF  Kill信号 
  SIGSEGV   11   C  无效的内存引用 
  SIGPIPE  13   A  管道破裂: 写一个没有读端口的管道 
  SIGALRM 14    A  由alarm(2)发出的信号 
  SIGTERM 15    A  终止信号 
  SIGUSR1  30,10,16 A  用户自定义信号1 
  SIGUSR2  31,12,17 A  用户自定义信号2 
  SIGCHLD  20,17,18 B    子进程结束信号 
  SIGCONT  19,18,25       进程继续(曾被停止的进程) 
  SIGSTOP  17,19,23 DEF 终止进程 
  SIGTSTP  18,20,24 D 控制终端(tty)上按下停止键 
  SIGTTIN   21,21,26 D 后台进程企图从控制终端读 
  SIGTTOU 22,22,27 D 后台进程企图从控制终端写 

  处理动作一项中的字母含义如下 

  A  缺省的动作是终止进程
  B  缺省的动作是忽略此信号
  C  缺省的动作是终止进程并进行内核映像转储(dump core)
  D  缺省的动作是停止进程
  E  信号不能被捕获
  F  信号不能被忽略

  如果默认处理动作是C(coredump),那么就会生成coredump,然后终止进程,在上一篇文章《啊,我的程序为啥卡住啦》中,提到用kill -11 pid

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的进程去哪儿了,谁杀了我的进程 的相关文章

随机推荐

  • SRAM、DRAM、硬盘、ROM、RAM、EPROM、FLASH区别和联系

    SRAM和DRAM的区别和联系 电脑中的内存属于DRAM CPU中的二级缓存属于SRAM 存储原理 RAM Random Access Memory 随机存取存储器 主要的作用就是存储代码和数据供CPU 在需要的时候调用 但是这些数据并不是
  • win7上搭建android开发环境使用appium自动化测试android应用(一)

    如何通过appium在win7上使用android模拟器测试android应用 本编文章参考了大量网络现存文章 并根据自己的实际情况编写 希望对想用appium的初学者能有所帮助 一 为什么选择appium 你不需要以任何方式重新编译或者修
  • Android Socket 服务器本地发送图片给客户端

    第一步服务端 public static void main String arges 服务器发送图片给客户端 new Thread Override public void run System out println 发送图片信息 Se
  • Android Studio 入门笔记 (二) Activity 和 Application 简介

    Activity用于提供可视化用户界面的组件 可以与用户进行交互完成某项任务 例如拨号 拍照 和 发送e mail等 Activity是Android应用程序的基本组成单位 每一个Activity被赋予一个窗口 用于绘制用户界面 一个Act
  • 区块链技术系列(3)- Fabric基础架构原理

    前言 对于区块链方面多技术 我还是建议大家多看英文文档 多利用Google来搜索技术文章 怎么搭建自己专属V P N来访问Google 请看我之前发的文章 新人如何快速搭建自己的个人网站以及自己专属V P N代理 Linux基金会于2015
  • c++Lab-虚函数

    c Lab 虚函数 里氏转换原则 c 的虚函数 虚函数的实现机制 去掉virtual关键字 获取普通函数和虚函数的地址 机制 里氏转换原则 原文是派生的子类可以用于直接替代其基类 这个是一个很有意思也很常用的原则 当然也很重要 一般在面向对
  • NBIOT连接阿里云控制台(MQTT连接阿里云控制台)

    首先使用MQTT工具连接阿里云平台进行测试之后再使用NBIOT连接控制台 这里主要讲解MQTT连接阿里云的步骤 1 注册或登录阿里云账号 自行前往阿里云官网注册 2 进入物联网界面 首先点击阿里云旁边1位置的选项进入如下界面 找到物联网IO
  • HTTP 请求和 RPC 调用

    rpc字面意思就是远程过程调用 只是对不同应用间相互调用的一种描述 实现方式可以是tcp和http 这里我说一种rpc实现 可以对照dubbo rpc最关键的地方有请求体的封装 响应体的封装以及客户端调用的封装 求体 服务类class 一般
  • 基于Android的视频分享平台的设计与实现

    基于Android的视频分享平台的设计与实现 摘 要 短视频平台是以特定群众为目标的差异化群体定位工具 其利用自身的便捷性可以实现视频的随时拍摄和随时上传 可以产生亚文化圈的萌芽 这种开放便利的特性在吸引了广大用户的同时 也在一定程度上解决
  • 密码学理论11:公钥加密

    公钥加密概述 一方 接收方 生成一对密钥 pk sk 分别称为公钥和私钥 发件人使用公钥加密消息 接收方使用私钥解密生成的密文 当 Alice 得知 Bob 想与她通信时 她可以生成 pk sk 假设她还没有这样做 然后将 pk 明文发送给
  • python读取中编码错误(illegal multibyte sequence )

    读取中文txt文件时 经常会出现 gbk codec can t decode bytes in position 31023 illegal multibyte sequence 主要讲一种情况就是文章中含有utf 8或gbk无法编码的字
  • java学习总结(三),socket和NIO

    Socket 概念 两个程序 进程 通过一个双向通信连接实现数据交换 这个双向连接的一端是一个socket 套接字 分类 1 面向连接 TCP 2 面向无连接 udp 结构 每一个socket都是由ip地址和端口号唯一确定的 生命周期 打开
  • Windows10家庭版使用LxRunOffline工具迁移子系统和docker发行版到其他盘符防止系统盘爆满

    1 下载LxRunOffline工具 2 解压到一个自己平时安装软件的目录 并配置环境变量 重启电脑 打开命令行工具 输入LxRunOffline 如果显示下面的提示证明已经安装成功了 c 2019 Microsoft Corporatio
  • springboot整合shiro

    文章目录 springboot 整合shiro 一 shiro是什么 二 与springboot的整合 1 前期准备 2 ShiroConfiger配置类 3 过滤 拦截 4 认证 5 授权 6 注销 7 显示问题 登录 注销同时显示 无权
  • GitHub新手使用教学(从安装到使用)

    一 安装Git for Windows 又名msysgit 下载地址 https git for windows github io 在官方下载完后 安装到Windows Explorer integration的时候 将选项中将 Git
  • successfulHomework_1

    Re库 1 学习链接 https zhuanlan zhihu com p 135862699 folium库 1 学习链接A https blog csdn net weixin 43903639 article details 1138
  • Fedora 网络配置

    运行 vim etc sysconfig network scripts ifcfg eth0 修改文件如下 具体IP地址及网关根据自己要求修改 DEVICE eth0 ONBOOT yes BOOTPROTO static IPADDR
  • Taro如何打包Android apk?

    首先 我们使用使用命令创建模板项目 创建的命令如下 taro init myApp 然后 使用 yarn 或者 npm install安装依赖包 并使用下面的命令编译Taro项目 yarn dev rn 启动后会开启一个监听的进程 不过 细
  • Blender学习笔记(基于辣椒酱教程)

    第一节课 安装与配置 主界面 1 推荐使用 zip版本 解压在纯英文路径 2 简体中文 3 如果想进一步翻译 使用 全局翻译 的翻译器 有下载 4 界面顶部标签英文改中文 双击命名 界面 建模 雕刻 UV编辑 纹理绘制 着色器 动画 渲染
  • 我的进程去哪儿了,谁杀了我的进程

    曾经在我眼前 却又消失不见 这是今天的第六遍 一段感情 我们希望它能够天长不久 越稳定越好 最怕的就是中途夭折 无疾而终 即使不能到海枯石烂的一天 我们也希望好聚好散 大家理智的告别 然后笑着活下去 况且 我们时候 我们只是希望给这段感情按