首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python -捕获所有信号

Python -捕获所有信号
EN

Stack Overflow用户
提问于 2010-01-28 01:16:30
回答 7查看 34.2K关注 0票数 32

在Linux下的python 2.6中,我可以使用以下代码来处理术语信号:

import signal
def handleSigTERM():
    shutdown()
signal.signal(signal.SIGTERM, handleSigTERM)    

除了一次只设置一个信号之外,还有什么方法可以为进程接收到的所有信号设置一个处理程序吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-01-28 01:24:04

您只需循环通过信号模块中的信号并设置它们。

for i in [x for x in dir(signal) if x.startswith("SIG")]:
  try:
    signum = getattr(signal,i)
    signal.signal(signum,sighandler)
  except (OSError, RuntimeError) as m: #OSError for Python3, RuntimeError for 2
    print ("Skipping {}".format(i))
票数 39
EN

Stack Overflow用户

发布于 2016-01-03 00:40:04

在Python3.5中,信号常量是defined as an enum,支持更好的方法:

import signal

catchable_sigs = set(signal.Signals) - {signal.SIGKILL, signal.SIGSTOP}
for sig in catchable_sigs:
    signal.signal(sig, print)  # Substitute handler of choice for `print`
票数 35
EN

Stack Overflow用户

发布于 2011-04-15 04:06:35

如果你想摆脱try,就忽略那些无法捕获的信号。

#!/usr/bin/env python
# https://stackoverflow.com/questions/2148888/python-trap-all-signals
import os
import sys
import time
import signal

SIGNALS_TO_NAMES_DICT = dict((getattr(signal, n), n) \
    for n in dir(signal) if n.startswith('SIG') and '_' not in n )


def receive_signal(signum, stack):
    if signum in [1,2,3,15]:
        print 'Caught signal %s (%s), exiting.' % (SIGNALS_TO_NAMES_DICT[signum], str(signum))
        sys.exit()
    else:
        print 'Caught signal %s (%s), ignoring.' % (SIGNALS_TO_NAMES_DICT[signum], str(signum))

def main():
    uncatchable = ['SIG_DFL','SIGSTOP','SIGKILL']
    for i in [x for x in dir(signal) if x.startswith("SIG")]:
        if not i in uncatchable:
            signum = getattr(signal,i)
            signal.signal(signum,receive_signal)
    print('My PID: %s' % os.getpid())
    while True:
        time.sleep(1)
main()
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2148888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档