如何在Python程序中处理操作系统信号?

3

我正在编写一个Python程序,通过无限循环从队列中读取数据。当操作系统或键盘发出信号(CTRL+C)时,如何处理该信号以跳出while循环,并优雅地关闭活动连接和文件并退出程序,而不是强行终止进程。

while True:
    read_from_file_and_do_something()
    ## Handle a signal of shutdown here.
    ## Send email before exiting.

这个程序将作为守护进程运行。因此需要发送一个信号。

1个回答

3

我认为signal模块是你要寻找的,

def handler(signum, frame):
    print 'Signal handler called with signal', signum

signal.signal(signal.SIGABRT, handler)

我应该在哪里使用它?循环内部吗? - Siddharth Gupta
在##处理信号signal.signal(signal.SIGABRT, handler)并在处理函数中使用退出码执行后续任务。 - nagato
@nagato,有没有一种优雅的方式来处理多个信号类型,使用同一个处理程序?(例如,INT、ABRT、HUP等) - Omer Dagan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接