from signal import *
import time
#信号处理函数
def handler(sig,frame):
if sig == SIGALRM:
print('接受到时钟信号')
elif sig == SIGINT:
print('接受到CTRL-C')
#def CTRL_C(sig,frame):
# print('接收到CTRL-C')
alarm(5)
signal(SIGALRM,handler)
#signal(SIGINT,CTRL_C) 使用CTRL_C函数处理信号
signal(SIGINT,handler)
while True:
time.sleep(2)
print('Wating for a signal')
#演示信号量的创建和方法
from multiprocessing import Semaphore,Process
from time import sleep
import os
#创建信号量
sem = Semaphore(3)
def fun():
print('进程{}等待信号量'.format(os.getpid()))
#消耗一个信号量
sem.acquire() # 为0则阻塞
print('进程{}消耗一个信号量'.format(os.getpid()))
sleep(3)
sem.release()
print('进程{}添加一个信号量'.format(os.getpid()))
jobs = []
for i in range(4):
p = Process(target = fun)
jobs.append(p)
p.start()
for i in jobs:
i.join()
print(sem.get_value())
# -*- coding:UTF-8 -*-
from multiprocessing import Process
import os
from signal import *
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 saler():
signal(SIGINT,saler_handler)
signal(SIGQUIT,saler_handler)
signal(SIGUSR1,saler_handler)
signal(SIGTSTP,SIG_IGN)
while True:
sleep(2)
print('python带你去远方')
def driver_handler(sig,frame):
if sig == SIGUSR1:
print('老司机开车了')
elif sig == SIGUSR2:
print('车速有点快,系好安全带')
elif sig == SIGTSTP:
os.kill(p.pid,SIGUSR1)
p = 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()