python学习笔记——多进程间通信——Linux信号基础
2018-03-28 22:44
525 查看
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)进程结束信号 [b]SIGKILL 和 SIGTERM 的区别[/b]
对于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和Signal
相关文章推荐
- linux基础编程:进程通信之信号
- linux进程间的通信机制——信号
- Linux进程间通信(四)---信号通信之信号发送捕捉kill()、raise()、alarm()、pause()及其基础实验
- Linux进程间通信(四)---信号通信之信号发送捕捉kill()、raise()、alarm()、pause()及其基础实验
- linux多进程——进程组与会话、守护进程、信号通信
- linux进程通信-信号
- Linux进程间通信(五)---信号通信之signal()、信号集函数组及其基础实验
- Linux进程通信之信号
- linux基础编程:进程通信之管道
- linux多进程——进程组与会话、守护进程、信号通信
- Linux进程间通信(五)---信号通信之signal()、信号集函数组及其基础实验
- Linux进程通信-信号学习
- 信号---用于Linux 进程通信
- linux进程通信之信号
- linux 进程通信之 信号
- Linux c==进程通信--信号(5)
- PHP进程通信基础——信号
- linux下c编程进程通信-管道与信号
- linux学习入门 基础部分(7)【1.进程定义2.ps命令3.进程优先级4.环境中进程的前后台调用5.进程信号6.用户登陆审记7.top命令】
- Linux进程基础与信号基础