python 信号通信

司机和售票员的故事
1. 创建父子进程,分别表示司机和售票员
2. 当售票员捕捉到 SIGINT信号时 给司机发送 SIGUSR1信号,此时司机打印 “老司机开车了”
    当售票员捕捉到 SIGQUIT时 给司机发送 SIGUSR2信号,此时司机打印“系好安全带,车速有点快”
    当司机捕捉到 SIGTSTP时,发送SIGUSR1给售票员,售票员打印 “到站了,请下车”
3. 到站后 售票员先下车(子进程退出),然后司机下车

import multiprocessing as mp 
from signal import * 
import os
from time import sleep

def saler_handler(sig,frame):
    if sig == SIGINT:
        os.kill(os.getppid(),SIGUSR1)
    elif sig == SIGQUIT:
        os.kill(os.getppid(),SIGUSR2)
    elif sig == SIGUSR1:
        print("到站了,请下车")
        os._exit(0)

def driver_handler(sig,frame):
    if sig == SIGUSR1:
        print("老司机,开车了")
    elif sig == SIGUSR2:
        print("车速有点快,系好安全带")
    elif sig == SIGTSTP:
        os.kill(p.pid,SIGUSR1)

#售票员
def saler():
    signal(SIGINT,saler_handler)
    signal(SIGQUIT,saler_handler)
    signal(SIGUSR1,saler_handler)
    signal(SIGTSTP,SIG_IGN)
    while True:
        sleep(2)
        print("Python 带你去远方")

p = mp.Process(target = saler)
p.start()

signal(SIGUSR1,driver_handler)
signal(SIGUSR2,driver_handler)
signal(SIGTSTP,driver_handler)
signal(SIGINT,SIG_IGN)
signal(SIGQUIT,SIG_IGN)
p.join()

猜你喜欢

转载自www.cnblogs.com/hooo-1102/p/10894888.html