0

我编写了这些测试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 上它不起作用?

4

1 回答 1

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()"
于 2013-07-09T06:48:10.653 回答