python学习笔记——多进程间通信——Linux信号基础
1 信号的基本描述
Signal信号(其全程为软中断信号)是Linux系统编程中非常重要的概念,信号是异步进程中通信的一种方式。
作用是通知进程发生了异步事件。进程之间可以调用系统来传递信号, 本身内核也可以发送信号给进程, 告诉该进程发生了某个事件.
在应用层将消息传递给内核监控,当消息处理完毕后,内核将消息反馈给应用层;这样操作不会出现阻塞等待,保持信号处理的持续性。
相对于共享内存,信号更加偏向于系统层面的,linux系统也是通过信号来管理进程的,而且系统也规定了某些进程接到某些信号后的行为。
一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号。
注意:信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。
信号通信的两种情况:
(1)被动式: 内核检测到一个系统事件.例如子进程退出会向父进程发送SIGCHLD信号,键盘按下control+c会发送SIGINT信号
(2)主动式: 通过系统调用kill来向指定进程发送信号
2 常见信号名称、含义、默认行为
信号名称 含义 默认行为
SIGINT ctrl + c 会发送给前台的每一个进程 终止 sigint
SIGQUIT ctrl + \ 终止 sigquit
SIGTSTP ctrl + z 暂停 sigtstp
SIGKILL 结束一个进程,且不能被忽略,处理 终止 sigkill
SIGALRM 时钟信号,常用作定时器 终止 sigalrm
SIGSTOP 暂停一个进程,且不能被忽略,处理 暂停 sigstop
SIGCHLD 子进程发送给父进程信号 忽略 sigchld
其他相对较全的信号名称,在终端上输入 kill -l

注:
(1)在信号列表中,34之后的信号尚没有定义。
(2)进程结束信号 SIGKILL 和 SIGTERM 的区别
对于SIGKILL信号,进程是不能忽略的。该信号意味不管进程正在做什么,立刻停止。
SIGTERM比较友好,进程能捕捉这个信号,根据您的需要来关闭程序。在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务。在某些情况下,假如进程正在进行作业而且不能中断,那么进程可以忽略这个SIGTERM信号。
Linux系统有两大类信号:
第一类:POSIX标准的规则信号(regular signal 1-31编号)
第二类:实时信号(real-time signal 32-63)
3 信号的基本用法
kill: 用法: kill [-s 信号声明 | -n 信号编号 | -信号声明] 进程号 | 任务声明 ... 或
kill -l [信号声明]
发送信号:os.kill(pid,signal) 向pid进程(主动)发送一个signal信号
例如,os.kill(9484,9)
首先我们可以查到9对应的SIGKILL信号,也意味着向PID为9484进程发送一个SIGKILL信号,最终将其杀死。
下图查看进程的杀死过程:
第一步:创建一个进程
(创建一个终端)
$ ipython3 In [1]: while True: ...: pass ...:
第二步:查看进程 ps -aux
(创建一个终端)
方法1
tarena 9424 0.2 0.8 155224 24452 pts/6 Sl+ 21:12 0:00 python3 /usr/b
方法2
top 直接动态监控进程状态,当添加或杀死一个进程时,可以实时查看到
一般新创建的进程PID数值较大,位于最下方
第三步:杀死信号
(创建一个终端)
方法1: ipyton3

方法2:创建py文件
import os os.kill(9424,9)
运行后会在步骤1终端上直接显示“已杀死”

参考:
python学习笔记——多进程间通信——Linux信号基础的更多相关文章
- python学习笔记五 模块上(基础篇)
模块学习 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要 ...
- python学习笔记六 面向对象相关下(基础篇)
面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以将多函数中公用的变量封装到对象中) 对象,根据模板创建的 ...
- python学习笔记三 文件操作(基础篇)
文件操作 打开文件 open(name[,mode[,buffering]]) open函数使用一个文件名作为强制参数,然后返回一个文件对象.[python 3.5 把file()删除掉] w ...
- Python学习笔记整理总结【语言基础篇】
一.变量赋值及命名规则① 声明一个变量及赋值 #!/usr/bin/env python # -*- coding:utf-8 -*- # _author_soloLi name1="sol ...
- Python学习笔记(一):基础知识
一.什么是python? python是一种面向对象.解释型的计算机语言,它的特点是语法简洁.优雅.简单易学 二.编译型语言和解释型语言 编译型语言就是把程序编译成计算机语言然后执行,(一次编译到处运 ...
- python学习笔记-(十)面向对象基础
面向对象相关知识简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义 ...
- python学习笔记五 模块下(基础篇)
shevle 模块 扩展pickle模块... 1.潜在的陷进 >>> import shelve>>> s = shelve.open("nb" ...
- Python学习笔记整理总结【web基础】【web/HTML/CSS/JavaScript/DOM/jQuery】
一.HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以 ...
- python学习笔记(二):基础知识点
python基本元素 7 // 2 3 7 % 3 1 # 取商以及余数 divmod(7,3) (2, 1) 1j*1j (-1+0j) 10/3 3.3333333333333335 '3,''1 ...
随机推荐
- 数学图形之莫比乌斯带(mobius)
莫比乌斯带,又被译作:莫比斯环,梅比斯環或麦比乌斯带.是一种拓扑学结构,它只有一个面(表面),和一个边界.即它的正反两面在同一个曲面上,左右两个边在同一条曲线上.看它的名字很洋气,听它的特征很玄乎,实 ...
- Apache PHP Mysql 开发环境快速配置
学习PHP开发要配置各种环境,一般会用到apache作为服务器.Mysql数据库.如何快速的配置环境成为困扰大家的烦恼,之前自己也配过,比较繁琐. 最新发现一款集成安装软件“phpStudy”.真可谓 ...
- Divide Two Integers leetcode java
题目: Divide two integers without using multiplication, division and mod operator. 题解: 这道题我自己没想出来...乘除 ...
- [asp.net入门]利用ADO.NET处理数据的简单之处
由于项目需要,要往数据库中导入一些历史数据,而这些历史数据都是线下人工记录的,所以有很多不规范的地方,比如:同一个公司的名称在不同的记录中可能相差那么几个字,而且每条数据不是每个字段都是完整的,等等诸 ...
- 系统出现bootmgr is missing解决方式,戴尔dellserver装系统须要特别注意的问题
系统出现bootmgr is missing解决方式,戴尔dellserver装系统须要特别注意的问题 欢迎关注http://blog.csdn.net/aaa123524457 转载请注明出处: h ...
- CentOS上编译安装OpenCV-2.3.1与ffmpeg-2.1.2
已測试环境: CentOS 6.3 32bit CentOS 6.5 64bit 以前在CentOS 6.3 32bit安装过OpenCV,參见CentOS 6.3中安装OpenCV2.3.1,现在换 ...
- 解决bootstrap和jquey中的.button扩展冲突的问题。
- 微信小程序-配置解答
微信小程序启动页面: Pages: index / logs 有 index和logs的页面,每个页面中都有独立的js逻辑,wxml负责页面内容,wxss负责样式. utils app.js app ...
- Electron 调用系统Office软件
通过打开本地空白文件的方式从而打开Office办公软件 const shell = require('electron').shell; const path = require('path'); s ...
- Linux RAID简介
现代磁盘的缺陷:IO性能极弱,稳定性极差 RAID廉价磁盘冗余阵列:通过多磁盘并行运行来提高计算机的IO性能,在创建RAID时要求硬盘大小.品牌.型号一样 RAID可分为多种,称之为RAID级别,现代 ...