通道原理:
一个进程向另一个进程发送一个信号来传递某种讯号,接受这根据收到的信号进行相应的行为
在命令端可以用这两个命令来查看和发起信号
kill -l 查看系统信号
kill -sig PID 向一个进程发送信号
一些常见的信号
SIGHUP 断开连接
SIGINT ctrl-c
SIGQUIT ctrl-
SIGTSTP ctrl-z
SIGKILL 终止进程且不能被处理
SIGSTOP 暂停进程且不能被处理
SIGALRM 时钟信号
SIGCHLD 子进程状态改变发送给父进程信息号
一些常用的函数:
os.kill(pid,sig)
功能 : 发送一个信号给某个进程
参数 : pid 给哪个进程发送信号
sig 要发送什么信号
signal.alarm(sec)
功能: 设置时钟信号 在一定时间后给自身发送SIGALRM信号
参数: sec 时间(秒)
*不会阻塞,但发送的信号会影响到后面的程序
* 一个进程中只能有一个时钟,后来的时候会覆盖前面的时间
signal.pause()
功能: 阻塞进程,等待一个信号
signal.signal(sig,handler)
功能 : 处理信号
参数 : sig 要处理的信号
handler 信号处理方法
可选值 : SIG_DFL 表示使用默认方法处理
SIG_IGN 表示忽略这个信号
func 自定义函数
自定义函数格式 : def func(sig,frame)
sig : 接收到的信号
frame: 信号结构对象from signal import *
from time import sleep alarm(5) #进行的处理一定要有这两个参数 #由于函数的形参会有signal传过来相对应的信号,因此可以利用信号进行相对应的动作 def handler(sig, frame): if sig == SIGALRM: print("接收到时钟信号") elif sig == SIGINT: print("zengsf") #使用默认方法处理信号 #signal.signal(signal.SIGINT, signal.SIG_DEF) #使用忽略信号 #signal.signal(signal.SIGINT, signal.SIG_IGN) #利用函数进行处理 signal(SIGALRM, handler) signal(SIGINT, handler) #需要一个循环,保证父进程一直存在
while True: sleep(1) print("-----")