【问题标题】:Can I raise a signal from python?我可以从 python 发出信号吗?
【发布时间】:2013-01-05 15:13:15
【问题描述】:

主题基本上告诉我想做什么。

我阅读了文档,它告诉我如何处理信号,但没有告诉我如何自己做信号。

谢谢!

【问题讨论】:

  • 请澄清:您是在谈论操作系统级别的信号还是 Qt 中的信号,即信号和插槽的概念。
  • 请澄清:您是在谈论操作系统级别的信号还是转向信号中的信号,即指示左转或右转的概念

标签: python signals ipc


【解决方案1】:

使用os.kill。例如,要将SIGUSR1 发送到您自己的进程,请使用

import os,signal
os.kill(os.getpid(), signal.SIGUSR1)

【讨论】:

    【解决方案2】:

    您可以使用os.kill 方法。从 Python 2.7 开始,它应该可以在 Unix 和 Windows 上运行(我自己没有测试过),尽管它需要使用不同的参数来调用:

    import os, signal
    
    os.kill(pid, signal.SIGHUP) # Unix version only...
    

    【讨论】:

      【解决方案3】:

      只是提出一种不同的方法,如果它在 Windows 上:

      import ctypes
      ucrtbase = ctypes.CDLL('ucrtbase')
      c_raise = ucrtbase['raise']
      c_raise(some_signal)
      

      'some_signal' 可以是任何信号编号,例如signal.SIGINT

      【讨论】:

      • 这可以很好地从请求中干净地停止 Flask。 os.kill 只是立即停止了它,这不是我想要的
      【解决方案4】:

      直接使用signal 包(3.8 版中的新功能)。例如:

      import signal
      signal.raise_signal( signal.SIGINT )
      

      参考:https://docs.python.org/3/library/signal.html#signal.raise_signal

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-15
        • 2021-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-11
        相关资源
        最近更新 更多