python主进程接收信号,子进程发送信号
代码:
import multiprocessing import signal import time import sys import os ''' signal.SIGINT 是由键盘输入产生的信号,通常通过按下 Ctrl+C 来触发,用于请求程序中断。 signal.SIGTERM 是由操作系统发送的终止信号,通常用于请求程序终止。在 Unix/Linux 系统中,kill 命令默认发送 SIGTERM 信号。 ''' def handler1(): # 获取当前进程的PID pid = os.getpid() # 打印当前进程ID print(f"子进程ID: {pid}") # 假设在这里做一些工作 time.sleep(2) # 尝试杀死当前进程 try: os.kill(pid, signal.SIGTERM) except OSError: print("无法杀死进程,进程可能已经结束。") # 等待操作系统杀死进程 time.sleep(1) def handler2(): # 获取当前进程的PID pid = os.getpid() # 打印当前进程ID print(f"子进程ID: {pid}") # 假设在这里做一些工作 time.sleep(2) # 尝试杀死当前进程 try: os.kill(pid, signal.SIGINT) except OSError: print("无法杀死进程,进程可能已经结束。") # 等待操作系统杀死进程 time.sleep(1) def signal_handler(signum, frame): print(f"主进程获取到一个信号{signum}") #print(frame) def main(): signal.signal(signal.SIGTERM, signal_handler) # 设置信号处理函数 signal.signal(signal.SIGINT, signal_handler) # 设置信号处理函数 p = multiprocessing.Process(target=handler1, name='sub process') p.start() p = multiprocessing.Process(target=handler2, name='sub process') p.start() #signal.pause() # 主进程阻塞式等待信号 time.sleep(5) if __name__ == '__main__': main()
输出:
子进程ID: 55575 主进程获取到一个信号15 子进程ID: 55576 主进程获取到一个信号2
https://docs.python.org/zh-cn/3.9/library/signal.html
https://docs.python.org/zh-cn/3.9/library/ipc.html
本文来自博客园,作者:河北大学-徐小波,转载请注明原文链接:https://www.cnblogs.com/xuxiaobo/p/18631546