• 信号通道


    通道原理:
      一个进程向另一个进程发送一个信号来传递某种讯号,接受这根据收到的信号进行相应的行为

    在命令端可以用这两个命令来查看和发起信号

      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("-----")
  • 相关阅读:
    将一个正整数分解质因数
    C语言中字符数组和字符串、字符串常量(转载)
    输出那一天是星期几
    吸血鬼数字—THINKING IN JAVA中一道习题
    Oracle外连接,左外连接,右外连接,内连接简析
    函数基础篇 Zeus
    程序员从初级到中级10个秘诀
    帮你免于失业的十大软件技术
    入门级XML学习(二)
    入门级XML学习(一)
  • 原文地址:https://www.cnblogs.com/zengsf/p/9649329.html
Copyright © 2020-2023  润新知