windows中的signal.SIGINT导致进程直接退出

时间:2013-07-09 06:34:55

标签: python windows signals

我编写了以下测试python代码:

import signal
import time
import os

def handler(signum, frame):
    print "do whatever, like call thread.interrupt_main()"
    return

signal.signal(signal.SIGINT, handler)

while 1:
    try:
        time.sleep(10)
    except:
        os.kill(int(os.getpid()), signal.SIGINT)
        pass

当我在Windows上执行此测试代码时,进程打印“执行任何操作,如调用thread.interrupt_main()”,然后退出; 在linux上,它可以正常工作。

为什么在Windows上它不起作用?

1 个答案:

答案 0 :(得分:1)

http://docs.python.org/2/library/os.html#os.kill

  

Windows:signal.CTRL_C_EVENT和signal.CTRL_BREAK_EVENT信号   是特殊信号,只能发送到控制台进程   共享公共控制台窗口,例如一些子过程。任何其他   sig的值将导致进程无条件地被杀死   TerminateProcess API,退出代码将设置为sig。

请尝试以下代码:

import time

while 1:
    try:
        time.sleep(1)
    except KeyboardInterrupt:
        print "do whatever, like call thread.interrupt_main()"