信號捕獲在window上測試沒有生效,在Linux上測試生效
1 import multiprocessing 2 import time 3 import signal 4 import os 5 import random 6 7 sid = 0 # 全局變量,進程之間的變量是否獨立測試 8 9 def myhandler(signum, frame): 10 global sid 11 print(signum) 12 print(sid) 13 print("del del") 14 exit() 15 16 def test(): 17 global sid 18 signal.signal(signal.SIGTERM, myhandler) # 定義捕獲信號和關閉時的處理函數 19 counter = 0 20 sid = random.randint(0,100) 21 while True: 22 print(counter, sid) 23 counter +=1 24 time.sleep(1) 25 26 27 if __name__=="__main__": 28 p = multiprocessing.Process(target=test) 29 p.start() 30 p1 = multiprocessing.Process(target=test) 31 p1.start() 32 p1.join(5) 33 if p1.is_alive(): 34 print(p1.pid) 35 print("Process Timeout, be Terminated !!!") 36 p1.terminate() # 發送關閉信號 37 p1.join() 38 p.terminate() 39 p.join() 40 print(sid)